25
✨ 飛躍編 Chapter 25

未来への一歩

旅の終わりは、新しい始まり

約55分
Software Architecture · intro Open Source · intro Career Development · intro Continuous Learning · intro
目次(30セクション)
🎬 Story — Introduction

ShimaLinkがローンチして、ちょうど1年。那覇市のイベントスペースに、チームが集まっていた。

壁には「ShimaLink 1st Anniversary」のバナー。100を超えるお店のオーナーたちも駆けつけてくれた。


Mika: 「1年前は4人で始めたのに、今はこんなに大勢の人が関わってくれてる…」

あなた: 「登録店舗150、月間アクセス50万PV。正直、ここまで来ると思ってなかった。」

あなた: 「僕なんて、1年前はターミナルの使い方も知らなかったのに。」


パーティーの途中、Yukiが真剣な表情でチームを呼んだ。

Yuki: 「実は今日、みんなに紹介したい人がいるの。ずっと内緒にしてたんだけど——」

会場の隅から、1人の女性が歩いてきた。短い髪に鋭い目。どこか見覚えがあるような——。

あなた: 「…え? まさか。」

Yuki: 「みんな、紹介するね。元セキュリティ研究者で、今はホワイトハッカーとして活動している——Rin。」

あなた: 「Rin…って、もしかして——」

Rin: 「そう。“Shadow”は私よ。」


会場が静まり返った。

Rin: 「最初に謝らないといけない。ShimaLinkを攻撃したのは私。でも、目的は破壊じゃなかった。」

あなた: 「どういうこと…?」

Rin: 「私はYukiの大学時代の後輩で、セキュリティの専門家。Yukiから『ShimaLinkのセキュリティを本気でテストしてほしい』って頼まれたの。」

Yuki: 「本当のセキュリティテストは、開発チームに知らせずにやるのが最も効果的なんだ。ペネトレーションテストって言うんだけど。ごめんね、黙ってて。」

Rin: 「あなたたちのセキュリティ対策はすばらしかった。私の攻撃をすべて防いだ。正直、感動した。」

あなた: 「あの時の経験があったから、セキュリティの重要性を本当に理解できた…」

Rin: 「これからは敵じゃなくて、味方として。ShimaLinkのセキュリティアドバイザーとして、一緒にやらせてほしい。」


Mika: 「すごい…チームが5人になった!」

Yuki: 「ShimaLinkはここまで来た。でも、本当の旅はこれからだよ。今日は、これからの未来について話そう。ソフトウェアアーキテクチャの見直し、オープンソースへの貢献、そしてみんなのキャリアのこと。」

あなた: 「1年前のあの日、カフェでYukiに声をかけてもらったところから始まった旅。ここまで来られたのは、みんなのおかげです。」

Yuki: 「さあ、最後のレッスンだ。未来への一歩を踏み出そう。」

ソフトウェアアーキテクチャレビュー — 全体を俯瞰する

ShimaLinkが1年を迎えた今、コードベース全体を見直す時が来た。

Yuki: 「アーキテクチャは建物の設計図。1年間の増築で歪みが出ていないか、一度立ち止まって確認しよう。」

アーキテクチャとは?

ソフトウェアアーキテクチャとは、システム全体の構造と、各部品がどう連携するかの設計図です。

ShimaLinkのアーキテクチャ(1年目の状態):

[ブラウザ] → [CDN] → [フロントエンド (React)]

                    [APIサーバー (Express)]
                    ↙        ↘
            [PostgreSQL]   [Redis]
                    ↘        ↙
                   [外部API]
                   (AI, メール, 決済)

アーキテクチャパターン

モノリス(Monolith)

すべてが1つのアプリケーション:
┌─────────────────────────┐
│   フロントエンド          │
│   API                    │
│   ビジネスロジック        │
│   データアクセス          │
└─────────────────────────┘
メリットデメリット
シンプル、デプロイが簡単大きくなると保守が難しい
チーム間の調整が少ない一部の変更が全体に影響
デバッグしやすいスケーリングの柔軟性が低い

マイクロサービス(Microservices)

機能ごとに独立したサービス:
┌────────┐ ┌────────┐ ┌────────┐
│ 店舗   │ │ 予約   │ │ レビュー│
│サービス │ │サービス │ │サービス │
└────────┘ └────────┘ └────────┘
     ↕          ↕          ↕
    [メッセージキュー / API Gateway]
メリットデメリット
独立してデプロイ可能複雑さが増す
技術選択の自由度ネットワーク通信のオーバーヘッド
スケーリングが柔軟運用・監視が大変

Yuki: 「ShimaLinkの規模ならモノリスで十分。マイクロサービスは大規模チーム向け。早すぎる分割は悪手だよ。」

SOLID原則

良いアーキテクチャの基盤となる5つの原則。

原則名前意味
S単一責任1つのモジュールは1つの責任だけ
O開放閉鎖拡張に開いて、修正に閉じている
Lリスコフ置換子クラスは親クラスの代わりに使える
Iインターフェース分離不要なインターフェースに依存しない
D依存性逆転具体ではなく抽象に依存する

実践: 単一責任の原則

// 悪い例: 1つのファイルに複数の責任
// shopController.ts
export class ShopController {
  async getShop() { /* HTTPレスポンス処理 */ }
  async calculateRevenue() { /* 売上計算ロジック */ }
  async sendNotification() { /* メール送信 */ }
  async generateReport() { /* PDF生成 */ }
}

// 良い例: 責任を分離
// controllers/shopController.ts — HTTPリクエストの処理
// services/revenueService.ts — 売上計算のビジネスロジック
// services/notificationService.ts — 通知の送信
// services/reportService.ts — レポートの生成

レイヤードアーキテクチャ

┌─────────────────────────────┐
│  Presentation Layer          │ ← ルーター、コントローラー
│  (リクエスト/レスポンス処理)   │
├─────────────────────────────┤
│  Application Layer           │ ← ユースケース、ワークフロー
│  (ビジネスロジックの調整)     │
├─────────────────────────────┤
│  Domain Layer                │ ← エンティティ、バリデーション
│  (ビジネスルール)             │
├─────────────────────────────┤
│  Infrastructure Layer        │ ← DB、外部API、ファイルシステム
│  (技術的な実装詳細)           │
└─────────────────────────────┘

技術的負債の管理

1年間の開発で溜まった「後で直す」リストを整理しよう。

種類対処
意図的な負債「今はハードコードで」計画的にリファクタリング
非意図的な負債知識不足で書いた非効率なコードコードレビューで発見
環境的な負債古いライブラリ、非推奨API定期的なアップデート
# 依存パッケージの更新確認
npm outdated

# セキュリティ脆弱性の確認
npm audit

ポイント

  • アーキテクチャはシステムの設計図。定期的に見直す
  • ShimaLink規模ならモノリスが適切。早すぎるマイクロサービス化は避ける
  • SOLID原則で保守しやすいコードを書く
  • レイヤードアーキテクチャで責任を分離する
  • 技術的負債は避けられないが、管理はできる

オープンソース貢献 — コミュニティに恩返しする

ShimaLinkは多くのOSSライブラリに支えられている。今度は自分たちが貢献する番だ。

Yuki: 「React、Express、PostgreSQL——全部オープンソース。私たちはその恩恵を受けてShimaLinkを作った。次はコミュニティに返す番だよ。」

オープンソースとは?

ソースコードが公開され、誰でも使用・修正・配布できるソフトウェアです。

ShimaLinkが使っているOSS

ライブラリライセンス貢献者数
ReactMIT1,700+
ExpressMIT300+
PostgreSQLPostgreSQL License700+
TypeScriptApache 2.0800+
Next.jsMIT3,000+

貢献の種類

コードを書くだけが貢献ではない。

貢献の種類難易度
バグ報告Issueを作成して問題を報告
ドキュメント改善誤字修正、翻訳、例の追加
質問への回答GitHubやフォーラムで他の人を助ける
バグ修正既存のIssueを修正するPRを作成
新機能の提案RFC(提案書)を書いて議論
新機能の実装コードを書いてPRを送る
メンテナンスPRレビュー、リリース管理

最初の貢献(First Contribution)

Step 1: 貢献するプロジェクトを見つける

探す場所:
- GitHub の "good first issue" ラベル
- "help wanted" ラベル
- 自分が使っているライブラリのIssue
- https://goodfirstissue.dev/

Step 2: リポジトリをフォーク&クローン

# 1. GitHubでForkボタンを押す

# 2. フォークをクローン
git clone https://github.com/YOUR_NAME/project.git
cd project

# 3. アップストリームを設定
git remote add upstream https://github.com/ORIGINAL/project.git

# 4. ブランチを作成
git checkout -b fix/typo-in-docs

Step 3: 変更を加えてPRを作成

# 変更を加える
# ...

# コミット
git add .
git commit -m "docs: fix typo in installation guide"

# フォークにプッシュ
git push origin fix/typo-in-docs

# GitHubでPull Requestを作成

Step 4: PRの書き方

## 概要
インストールガイドの誤字を修正しました。

## 変更内容
- `npm instal``npm install` の修正
- コマンド例のインデントを統一

## 関連Issue
Fixes #1234

## テスト
- [x] ドキュメントのビルドが通ることを確認

コミットメッセージの規約

多くのOSSプロジェクトはConventional Commitsを採用しています。

プレフィックス用途
feat:新機能feat: add dark mode support
fix:バグ修正fix: resolve login timeout
docs:ドキュメントdocs: update API reference
style:フォーマットstyle: fix indentation
refactor:リファクタリングrefactor: extract validation
test:テストtest: add booking tests
chore:雑務chore: update dependencies

自分のOSSプロジェクトを公開する

ShimaLinkで作ったユーティリティを公開してみよう。

# 新しいリポジトリを作成
mkdir shimalink-date-utils
cd shimalink-date-utils
npm init -y

# ライセンスを追加(MIT推奨)
# LICENSE ファイルを作成

# READMEを書く
# - プロジェクトの説明
# - インストール方法
# - 使い方の例
# - ライセンス

# npmに公開
npm publish

ライセンスの基本

ライセンス特徴制約
MIT最も自由著作権表示のみ必要
Apache 2.0特許保護あり著作権表示 + 変更箇所の明示
GPLコピーレフト派生物も同じライセンスで公開
ISCMITに近いシンプルな文面

Yuki: 「迷ったらMITライセンス。ShimaLinkの共有ライブラリもMITで公開しよう。」

ポイント

  • OSS貢献はコードだけじゃない。ドキュメント改善やバグ報告も立派な貢献
  • “good first issue” ラベルのIssueから始める
  • フォーク → ブランチ → 変更 → PR の流れを覚える
  • Conventional Commitsでコミットメッセージを統一する
  • 自分のライブラリをOSSとして公開する経験は大きな成長になる

テックキャリアパス — エンジニアとしての道

ShimaLinkの経験を積んだ今、エンジニアとしてのキャリアを考える時が来た。

Yuki: 「技術を学ぶことと、キャリアを作ることは別の話。自分の強みと興味を知って、進む道を選ぼう。」

エンジニアのキャリアパス

                    ┌──── CTO / VP of Engineering

              ┌─────┤
              │     └──── Engineering Manager

  Junior ── Mid ── Senior ──┤

                            ├──── Staff Engineer

                            └──── Principal Engineer

2つのトラック

マネジメントトラックテクニカルトラック
EM(エンジニアリングマネージャー)Staff Engineer
DirectorPrincipal Engineer
VP of EngineeringDistinguished Engineer
CTOFellow

Yuki: 「マネージャーにならなくても、技術のスペシャリストとしてキャリアを伸ばせる。どちらが正解ということはない。」

エンジニアの専門分野

分野やることShimaLinkでの経験
フロントエンドUI/UX、React、CSSCh.3-4, Ch.6-7
バックエンドAPI、DB、サーバーCh.8-10
フルスタックフロント+バックShimaLink全体
DevOps/SRECI/CD、インフラ、監視Ch.17-20
セキュリティ脆弱性診断、防御Ch.15
データエンジニアデータ基盤、分析Ch.9, Ch.21
AIエンジニアML/LLM統合Ch.24
モバイルiOS/Android開発

ポートフォリオの構築

ShimaLinkの経験をどうアピールするか。

GitHubプロフィール

# あなたの名前

## ShimaLink — 沖縄のローカルビジネスプラットフォーム
- React + TypeScriptでフロントエンドを構築
- Express + PostgreSQLのREST API設計
- Docker + GitHub Actionsでci/CDパイプライン構築
- OpenAI APIを統合したAI機能の実装

🔗 [デモ](https://shimalink.example.com)

技術ブログ

学んだことを記事にすることで、知識が定着し、アウトプットの実績になる。

記事のアイデア:
- 「ShimaLinkを1年運用して学んだこと」
- 「N+1問題を解決してAPIが100倍速くなった話」
- 「AIチャットボットを自作した記録」
- 「初めてのOSS貢献で学んだこと」

技術面接の準備

面接の種類内容準備方法
コーディング面接アルゴリズム、データ構造LeetCode, AtCoder
システム設計面接アーキテクチャ設計ShimaLinkの設計を説明できるように
行動面接チームワーク、問題解決STAR法(状況→課題→行動→結果)
技術面接使用技術の深い理解なぜその技術を選んだか説明できるように

STAR法の例

質問: 「困難な技術的課題をどう解決しましたか?」

S(状況): ShimaLinkのピーク時にページ表示が8秒かかっていた
T(課題): 2秒以下に改善する必要があった
A(行動): Lighthouseで計測し、DBインデックス追加、画像最適化、
          Redis キャッシュ導入を実施
R(結果): 1.8秒に改善、ユーザークレームがゼロに

フリーランスという選択肢

項目正社員フリーランス
収入の安定安定変動あり
自由度会社のルール自分で決められる
スキルアップ研修制度あり自己投資
社会保険会社負担自己負担
案件選択限定的自由に選べる

Yuki: 「私はフリーランスだけど、最初は企業でしっかり基礎を身につけた。どちらのルートも正解。大事なのは自分の価値を高め続けること。」

ポイント

  • エンジニアのキャリアにはマネジメントとテクニカルの2トラックがある
  • 自分の強み・興味に合った専門分野を見つける
  • GitHubプロフィール、技術ブログ、ポートフォリオで実績を可視化
  • 面接準備はコーディング、システム設計、行動面接の3本柱
  • キャリアの正解は1つではない。学び続けることが最大の強み

継続的な学習 — エンジニアの成長戦略

技術の世界は常に変化する。大事なのは「学び方を学ぶ」こと。

Yuki: 「1年前、あなたはターミナルも知らなかった。でも今、AIを統合したサービスを運用している。この”学ぶ力”こそが最大の武器。」

学習のフレームワーク

T型スキル

  広い知識(浅く広く)
──────────────────────

          │  深い専門性
          │  (1つの領域を深く)

レイヤーShimaLinkで身につけたこと
広い知識フロント、バック、インフラ、AI、セキュリティの基礎
深い専門性これから選ぶ!どの領域を深掘りする?

70-20-10の法則

割合学習方法
70%実践(仕事・個人プロジェクト)ShimaLinkの開発
20%他者から学ぶ(メンター、コードレビュー)Yukiからの指導
10%座学(書籍、講座、ドキュメント)公式ドキュメント

効果的な学習戦略

1. 公式ドキュメントを読む

最も信頼できる情報源:
- React: react.dev
- TypeScript: typescriptlang.org
- Node.js: nodejs.org/docs
- PostgreSQL: postgresql.org/docs

Yuki: 「ブログ記事やQiitaも参考になるけど、まずは公式ドキュメント。古い記事の間違った情報に惑わされないためにも。」

2. 手を動かして学ぶ

効果的な学習サイクル:
1. 概念を読む(10分)
2. 実際にコードを書く(30分)
3. 壊してみる(10分)
4. 直してみる(10分)
5. 自分の言葉で説明する(10分)

3. アウトプットする

アウトプットメリット
技術ブログ知識の定着、ポートフォリオ
登壇(LT)プレゼン力、認知度向上
OSS貢献実践力、コミュニティへの参加
個人プロジェクト自由な実験、新技術の習得
メンタリング教えることで深く理解

4. コミュニティに参加する

沖縄のテックコミュニティ:
- もくもく会(黙々と作業する会)
- LT(ライトニングトーク)イベント
- ハッカソン
- オンライン: Discord, Slack, X (Twitter)

今後注目すべき技術トレンド

トレンド概要学ぶべき理由
AI/LLM大規模言語モデルの進化あらゆるサービスにAIが統合される
WebAssemblyブラウザで高速なコード実行パフォーマンスの新たな選択肢
Edge Computingユーザーに近いサーバーで処理レイテンシ削減の新パラダイム
TypeScriptJavaScript + 型安全すでに業界標準
Rust安全で高速なシステム言語次世代インフラの基盤

学習のアンチパターン

やりがち改善策
チュートリアル地獄学んだ後に自分のプロジェクトで実践
新技術の追いかけ基礎を固めてから新しいものへ
完璧主義まず動くものを作り、後から改善
独学のみコミュニティやメンターの力を借りる
インプットだけアウトプットして知識を定着

ShimaLinkの旅で学んだこと — 全25チャプターの振り返り

Ch.01-05 [創業期]  基礎の基礎
├── ターミナル、HTML/CSS、Git、HTTP
├── 最初のクライアント、デプロイ
└── 学び: 小さく始めて、まず動かす

Ch.06-10 [成長期]  技術スタックの拡充
├── JavaScript、TypeScript、API設計
├── データベース、認証
└── 学び: 正しい技術選択が成長を加速する

Ch.11-15 [試練期]  品質とセキュリティ
├── React、状態管理、パッケージ管理
├── バージョン管理、セキュリティ
└── 学び: 守るべきものがあるから、強くなれる

Ch.16-20 [拡張期]  インフラとDevOps
├── Docker、CI/CD、クラウド
├── チーム開発、モニタリング
└── 学び: 自動化と監視が安定運用の鍵

Ch.21-25 [飛躍期]  さらなる高みへ
├── Python自動化、テスト、パフォーマンス
├── AI統合、アーキテクチャ、キャリア
└── 学び: 学び方を学べば、何でも身につけられる

最後に

エンジニアとして最も大切なこと:

1. 好奇心を持ち続ける
2. 手を動かして学ぶ
3. 失敗を恐れない
4. コミュニティに貢献する
5. 学び続ける

Yuki: 「技術は変わるけど、学ぶ力は一生もの。あなたはこの1年で、その力を手に入れた。次の冒険が楽しみだね。」

ポイント

  • T型スキル: 広い知識 + 1つの深い専門性
  • 70-20-10: 実践70%、他者から20%、座学10%
  • アウトプット(ブログ、登壇、OSS)で知識を定着させる
  • チュートリアル地獄を避け、自分のプロジェクトで実践する
  • 学び方を学ぶことが、エンジニアの最大の武器
📖 Story — Conclusion

1周年パーティーが終わり、夜の那覇。チームは海沿いのベンチに座っていた。

潮風が心地よい。遠くに見える街の灯りが、海面に映っている。


あなた: 「改めて振り返ると、本当にすごい1年だったな。」

あなた: 「ターミナルの使い方から始まって…HTML、CSS、JavaScript、TypeScript、API、データベース、認証…」

Mika: 「Docker、CI/CD、クラウド、モニタリング。途中で何度も心が折れそうになったけど。」

あなた: 「Shadowの攻撃もあったし、パフォーマンス問題もあったし。でも、その度にチームで乗り越えてきた。」

Rin: 「外から見てても、あなたたちの成長速度は異常だった。攻撃するたびに防御が強くなっていくんだもの。」


Yuki: 「ねえ、覚えてる?Chapter 1で私が言ったこと。」

あなた: 「…『大丈夫。まずは開発のホームベースを作るところから』でしたっけ。」

Yuki: 「そう。そして今、あなたは一人前のエンジニアになった。ShimaLinkというプロダクトを作り、100以上の沖縄のお店を支え、AIまで統合した。」

あなた: 「でも、まだまだ知らないことだらけです。」

Yuki: 「それでいいんだよ。エンジニアリングに”ゴール”はない。新しい技術は毎日生まれるし、学ぶことは一生尽きない。でもね——」

Yukiが空を見上げた。

Yuki: 「大事なのは、学び方を学んだこと。あなたはもう、どんな新しい技術が来ても、自分で調べて、試して、理解できる。それが、この1年で身につけた一番の力だよ。」


あなた: 「みんな、本当にありがとう。Yukiさん、Mika、そしてRinさん。ShimaLinkを通じて学んだことは、技術だけじゃなかった。」

あなた: 「チームワークとか、ユーザーのことを考える姿勢とか。」

Mika: 「諦めない粘り強さとか、失敗から学ぶことの大切さとか。」

Rin: 「セキュリティは攻撃者の視点を持つことが大事。でも、守るべきものがあるからこそ、守る技術が輝く。」


Yuki: 「ShimaLinkの物語はここで一区切り。でも、あなたの物語は続いていく。次はどんなサービスを作る?どんな問題を解決する?」

あなた: 「まだわかりません。でも、一つだけ確かなことがあります。」

Yuki: 「なに?」

あなた: 「どんな挑戦が来ても、もう怖くない。学び方を知っているから。そして、一緒に走れる仲間がいるから。」


夜空に星が瞬いていた。沖縄の温かい風が、5人の未来を祝福するように吹いている。

$ git log --oneline | tail -1
a1b2c3d ShimaLinkの最初のランディングページを作成

$ git log --oneline | head -1
f9e8d7c AI紹介文ジェネレーター v2.0をリリース

$ git log --oneline | wc -l
     1,247

1,247回のコミット。1年間の成長の記録。

そして、次のコミットはまだ書かれていない。


Code Quest — 完

この物語を最後まで読んでくれてありがとう。 あなたがこの旅で学んだすべてのスキルは、現実の世界でも使えるものばかりです。 次はあなた自身のShimaLinkを作る番。

Happy Coding!

🧠 理解度チェック

Q1.SOLID原則の「S」(単一責任の原則)の意味は?

💡 ShopControllerに詰め込まれていた処理を、サービスごとに分離したリファクタリングを思い出そう。

Q2.オープンソースへの最初の貢献として最も始めやすいのは?

💡 Yukiが「コードを書くだけが貢献じゃない。ドキュメント改善も立派な貢献」と言っていたね。

Q3.T型スキルの「深い部分」にあたるのは?

💡 ShimaLinkの経験で広い知識は身についた。次は「どの分野を深掘りするか」を選ぶ段階だね。

Q4.モノリスアーキテクチャのメリットとして正しいのは?

💡 Yukiが「ShimaLinkの規模ならモノリスで十分」と言っていた理由がこれだよ。

Q5.技術面接のSTAR法で「A」は何を表す?

💡 パフォーマンスチューニングの経験をSTAR法で語る例を学んだね。

Q6.学習のアンチパターン「チュートリアル地獄」を避ける方法は?

💡 ShimaLinkというプロジェクトを通じて学んだ経験が、座学よりもはるかに力になったよね。

Q7.Conventional Commitsで新機能追加時に使うプレフィックスは?

💡 OSS貢献の作法として学んだ、コミットメッセージの規約だね。

Q8.70-20-10の法則で、学習の70%を占めるべき方法は?

💡 ShimaLinkの開発を通じて最も多くを学んだ、という1年の体験そのものだね。

よくある質問

GitHubでFork(フォーク)する方法がわからない

**手順:** 1. 貢献したいリポジトリのGitHubページへ 2. 右上の「Fork」ボタンをクリック 3. 自分のアカウントにコピーが作られる 4. フォークをクローン: ```bash git clone https://github.com/YOUR_NAME/project.git cd project # アップストリーム(元のリポジトリ)を追加 git remote add upstream https://github.com/ORIGINAL/project.git # 最新を取得 git fetch upstream git merge upstream/main ``` **フォークとクローンの違い:** - フォーク: GitHubサーバー上でリポジトリをコピー - クローン: リポジトリをローカルPCにダウンロード

Pull Requestが「コンフリクト」で出せない

**リベースでコンフリクトを解消:** ```bash # 元のリポジトリの最新を取得 git fetch upstream # 自分のブランチをリベース git rebase upstream/main # コンフリクトが表示されたら: # 1. 該当ファイルを開いて手動で解消 # 2. git add <解消したファイル> # 3. git rebase --continue # フォークにプッシュ(--forceが必要) git push origin my-branch --force-with-lease ``` **コンフリクトの読み方:** ``` <<<<<<< HEAD 自分の変更 ======= 相手の変更 >>>>>>> upstream/main ``` 両方の変更を見て、正しい状態に手動で修正します。

技術ブログの書き方がわからない

**基本構成:** ``` 1. タイトル(問題→解決の形が引きがある) 例: 「N+1問題を解消してAPIレスポンスを100倍速くした」 2. 導入(何が問題だったか) → 具体的な数値があると良い 3. 原因(なぜその問題が起きたか) → 技術的な分析 4. 解決策(どう解決したか) → コード例付き 5. 結果(どれくらい改善したか) → Before/Afterの数値比較 6. まとめ(学んだこと) ``` **投稿先:** - Zenn(日本のエンジニア向け) - Qiita(日本最大の技術記事プラットフォーム) - 個人ブログ(自由度が高い) - note(カジュアルな記事向け)

ポートフォリオに何を載せればいい?

**必須項目:** 1. **自己紹介**: 名前、スキル、経験年数 2. **プロジェクト(3つ以上)**: - スクリーンショット - 使用技術 - 自分の役割 - デモURL or GitHubリンク 3. **技術スタック**: 使える技術一覧 4. **連絡先**: メール、GitHub、LinkedIn **ShimaLinkの書き方例:** ``` ShimaLink — 沖縄ローカルビジネスプラットフォーム 技術: React, TypeScript, Express, PostgreSQL, Docker, AWS, OpenAI API 成果: - 150+店舗が利用する実サービス - Lighthouse 95点のパフォーマンス - AI紹介文生成機能の設計・実装 ``` **コツ:** 技術の羅列より「何を解決したか」を伝える。

MITライセンスとGPLの違いがわからない

**簡単な比較:** | | MIT | GPL | |---|---|---| | 商用利用 | OK | OK | | 改変 | OK | OK | | 再配布 | OK | OK | | ソースコード公開 | **不要** | **必要** | | 派生物のライセンス | 自由 | **GPLのみ** | **例え:** - MIT: 「自由に使っていいよ。著作権表示だけ残してね」 - GPL: 「自由に使っていいよ。ただし、あなたの派生物もGPLで公開してね」 **どちらを選ぶ?** - 多くの人に使ってほしい → MIT - 派生物もオープンでいてほしい → GPL - 迷ったら → MIT

技術的負債って具体的にどう管理する?

**技術的負債の管理フロー:** 1. **記録する**: TODOコメントやIssueで可視化 ```typescript // TODO: この関数はN+1問題がある。JOINに書き換える // Technical Debt: #issue-123 ``` 2. **優先度をつける** | 優先度 | 基準 | |--------|------| | High | ユーザーに影響がある | | Medium | 開発速度に影響がある | | Low | コードが読みにくいだけ | 3. **定期的に返済する** - スプリントの20%を技術的負債の解消に使う - 「ボーイスカウトルール」: 触ったコードは必ず少し改善する 4. **増やさない工夫** - コードレビューで負債を防ぐ - テストがあれば安心してリファクタリングできる

新しい技術を効率よくキャッチアップする方法は?

**5ステップ学習法:** 1. **概要を掴む(30分)** - 公式サイトの「Getting Started」を読む - 何が嬉しいのか(Why)を理解する 2. **チュートリアルを1つだけやる(2時間)** - 公式のチュートリアルが最も信頼できる - 完璧に理解しなくてOK 3. **ミニプロジェクトを作る(1日)** - TODOアプリなど、小さなものでいい - チュートリアルの延長ではなく、自分で考える 4. **既存プロジェクトに組み込む(数日)** - ShimaLinkの一部で試す - 実際の問題を解決する 5. **アウトプットする(1時間)** - 学んだことをブログ記事にする - 「5分で分かる〇〇」形式が書きやすい

エンジニアのコミュニティはどこで見つける?

**オンラインコミュニティ:** | プラットフォーム | 特徴 | |---------------|------| | connpass | 日本のIT勉強会検索サイト | | Discord | リアルタイムチャット | | X (Twitter) | 技術情報の速報 | | Zenn | 技術記事+スクラップ | | GitHub Discussions | OSSプロジェクトの議論 | **オフラインコミュニティ:** - もくもく会: 黙々と作業する会(初心者歓迎が多い) - LT会: 5分間のプレゼン(聴くだけでもOK) - ハッカソン: チームでプロダクトを作る **始め方:** 1. connpassで「沖縄 エンジニア」と検索 2. 興味のあるイベントに参加申込み 3. まずは聴く側で参加(発表は不要) 4. 慣れたらLTに挑戦

レイヤードアーキテクチャの各層の役割がわからない

**レストランで例えると:** | 層 | レストランの例 | ShimaLinkの例 | |---|---|---| | **Presentation** | ウェイター(注文を受ける) | APIルーター、コントローラー | | **Application** | フロアマネージャー(調整) | ユースケース、ワークフロー | | **Domain** | シェフ(料理のルール) | ビジネスロジック、バリデーション | | **Infrastructure** | 食材倉庫、調理器具 | DB、外部API、ファイルシステム | ```typescript // Presentation: HTTPリクエストを受ける router.post('/api/bookings', bookingController.create); // Application: ワークフローを調整 async function createBooking(data) { validate(data); const booking = await bookingRepo.save(data); await notificationService.send(booking); return booking; } // Domain: ビジネスルール function validate(data) { /* バリデーション */ } // Infrastructure: DB操作 const bookingRepo = { save: (data) => db.insert(data) }; ```

マイクロサービスに移行すべきタイミングは?

**移行の判断基準:** | 状況 | モノリスを維持 | マイクロサービスを検討 | |------|--------------|--------------------| | チーム規模 | 〜10人 | 20人以上 | | デプロイ頻度 | 週1-2回 | 1日複数回、独立して | | スケーリング | 全体で十分 | 機能ごとに異なる要件 | | 技術多様性 | 統一で問題なし | 機能に最適な言語を使いたい | **ShimaLinkの場合:** - チーム5人 → モノリスで十分 - 将来チームが20人を超えたら検討 **Yukiのアドバイス:** > 「マイクロサービスは銀の弾丸じゃない。複雑さが増す分、運用コストも跳ね上がる。モノリスのまま、レイヤー分離をきちんとやる方が現実的だよ。」