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
| ライブラリ | ライセンス | 貢献者数 |
|---|---|---|
| React | MIT | 1,700+ |
| Express | MIT | 300+ |
| PostgreSQL | PostgreSQL License | 700+ |
| TypeScript | Apache 2.0 | 800+ |
| Next.js | MIT | 3,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 | コピーレフト | 派生物も同じライセンスで公開 |
| ISC | MITに近い | シンプルな文面 |
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 |
| Director | Principal Engineer |
| VP of Engineering | Distinguished Engineer |
| CTO | Fellow |
Yuki: 「マネージャーにならなくても、技術のスペシャリストとしてキャリアを伸ばせる。どちらが正解ということはない。」
エンジニアの専門分野
| 分野 | やること | ShimaLinkでの経験 |
|---|---|---|
| フロントエンド | UI/UX、React、CSS | Ch.3-4, Ch.6-7 |
| バックエンド | API、DB、サーバー | Ch.8-10 |
| フルスタック | フロント+バック | ShimaLink全体 |
| DevOps/SRE | CI/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 | ユーザーに近いサーバーで処理 | レイテンシ削減の新パラダイム |
| TypeScript | JavaScript + 型安全 | すでに業界標準 |
| 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)で知識を定着させる
- チュートリアル地獄を避け、自分のプロジェクトで実践する
- 学び方を学ぶことが、エンジニアの最大の武器
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,2471,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のアドバイス:** > 「マイクロサービスは銀の弾丸じゃない。複雑さが増す分、運用コストも跳ね上がる。モノリスのまま、レイヤー分離をきちんとやる方が現実的だよ。」