はじめに
あけましておめでとうございます。
エンジニア歴3年目のAKです。
先月に引き続き、今月に個人学習でやっていたことを記録していきます。
先月の記事です↓
学習22ヶ月目にやったこと
1.Goチュートリアルの実施
次の案件でGoを使うらしいとの話が出たので、初めてGoを触ってみました。
どんな言語なのかをざっくり掴むために、超シンプルなチュートリアルをAIを使わずに行いました。
公式チュートリアルはいくつか種類がありますが、今回は下記の「モジュールを作成する」を選びました。
理由としては、コードが超シンプル&GOの基本的な機能(モジュール作成・配列・エラー処理・テスト・ビルド)を体験できると感じたからです。
本チュートリアルは以下のような流れになっています。
1. 外部参照可能な新規モジュールの作成
2. 作成したモジュールを使用する新規モジュールの作成
3. 簡単なエラーハンドリングの実装
4. 配列を用いてランダムな挨拶を返す実装
5. map処理を用いて複数人に挨拶を返す実装
6. 簡単なテストの実装
7. ローカルにコードをコンパイル
Goを触ってみた感想としては、「シンプルで直感的に理解しやすい(シンプルさゆえに不安になる)」「try-catch文がない(多用していた身からすると驚き)」でした。Javaとかなり似ているような気がします。
余談ですが、今のところ案件でGoを使う話は無くなりそうです。
せっかく学習したのでいつか生きればなと思います。
2.2026年の学習目標(バックエンド)を立てる
私の性格上、やる事を決めないと始められないタイプ(特に勉強)なので、参画している案件に即した学習プランをAIと相談しつつ組み立ててみました。
特に知識が少ないバックエンドの学習プランです。
【技術スタック】
Python
AWS(Secrets Manager/S3)
Keycloak
PostgreSQL
【1. Python基礎(合計7–10時間)】
到達目標: boto3と標準ライブラリで簡単なスクリプトが書ける
必須トピック:
venv/requirements.txt、import/パッケージ構成、例外処理、with/コンテキストマネージャ、logging、datetime/timezone、pathlib
boto3の基本(認証情報の読み取り順序、client/resourceの違い)
実践タスク:
Secrets ManagerからJSONを取得して辞書化し、設定値をログ出力
ローカルの/tmpに作成したダミーファイルをS3にアップロード/ダウンロード
Qiita案:
「boto3入門:Secrets ManagerとS3を最短で動かす」
「Python標準loggingでAPIサーバの運用ログ設計」
【2. Django/DRF基礎(15–20時間)】
到達目標: 1エンドポイントをModel→Serializer→ViewSet→Routerで自作し、認可とバリデーションを付けられる
必須トピック:
プロジェクト/アプリ構成、settings/urls、Model/ORM、migrate、admin
DRFのViewSet/Serializer/Router、Validation、Pagination、Filtering、Permissions
CORS設定の要点
実践タスク:
school.studentsのGET相当を模倣する簡易APIを新規アプリで作成(フィルタ・ページネーション付き)
独自Permissionクラスでロールチェック(後述のKeycloakロール連携)
Qiita案:
「Django REST FrameworkでViewSet/Serializerを設計する基本」
「CORS設定の落とし穴とベストプラクティス」
【3. 認証・認可(Keycloak)(8–12時間)】
到達目標: JWTの検証とロールベースのアクセス制御をDRFで実装
必須トピック:
OIDC基礎、JWTの構造、issuer/audience検証、公開鍵取得
ロールマッピング:KeycloakのRealm/Client Roles → DRF Permission
実践タスク:
リクエストヘッダのJWTを検証し、gakkopay_full_role/gakkopay_mini_roleでアクセス制御
認証失敗/権限不足時のハンドリングと統一レスポンス
Qiita案:
「Keycloak×DRFでJWT検証とRBACを組む:実装手順とテスト」
【4. AWS統合(Secrets Manager/S3)(10–15時間)】
到達目標: 設定値の安全な読込とS3へのアップロード/ダウンロードを堅牢に
必須トピック:
IAM最小権限設計(SecretsのGetSecretValue、S3のPut/Get/List)
例外処理/リトライ、転送設定(TransferConfig)、ContentType、サーバサイド暗号化(SSE-S3/KMS)
プレサインドURL(ダウンロードはサーバ経由ではなくURL返却の方がスケール/セキュリティ面で有利)
実践タスク:
AWS_SECRETSあり/なしの双方で設定読込が成功することを確認
S3のキー命名規約(例:school_id/fiscalyear/reports/yyyymmdd_report.xlsx)を決めて適用
プレサインドURL発行エンドポイントの試作
Qiita案:
「S3プレサインドURLで安全にファイル配布する実装ガイド」
「Secrets Managerで環境変数ゼロ運用:失敗時のフォールバック設計」
【5. PostgreSQL/ORM運用(10–15時間)】
到達目標: よく使うクエリに適切なインデックスを付け、N+1を避ける
必須トピック:
DockerでローカルPostgreSQL、psql/pg_dump/pg_restore、トランザクション、ロック
Django ORM最適化:select_related/prefetch_related、EXPLAIN ANALYZE
制約設計(UNIQUE/FOREIGN KEY)、migrationの安全運用(段階的リリース)
実践タスク:
学年/クラス/年度での生徒検索に必要な複合インデックスを洗い出し適用
集計系クエリのEXPLAINでボトルネック確認、N+1解消
Qiita案:
「Django ORMチューニング:N+1の実例と解決パターン」
「PostgreSQLのEXPLAIN ANALYZEでAPI遅延を特定する」
【6. レポート生成(openpyxl/reportlab/pdfrw)(8–12時間)】
到達目標: 日本語フォント対応のPDFと、スタイル付きExcelを安定生成
必須トピック:
openpyxlの書式/テンプレート運用、メモリ/速度対策(write_only mode)
reportlabの日本語フォント埋め込み、pdfrwでの既存PDF合成
生成~一時保存~S3アップロード~削除の例外時クリーンアップ
実践タスク:
未納通知PDFにフォントを適用し、固定レイアウトをテンプレート化
大きめデータでExcel生成時間計測、閾値設定(分割生成の検討)
Qiita案:
「reportlabで日本語PDF:フォント設定とレイアウトのコツ」
「openpyxl高速化:write_onlyやスタイル最適化の実践」
【7. デプロイ/運用(uWSGI)(8–12時間)】
到達目標: 本番運用に耐えるuWSGI設定とログ/ヘルスチェック
必須トピック:
プロセス/スレッド数のチューニング、タイムアウト、graceful reload
ログ設計(リクエストID、構造化ログ)、障害時の復旧手順
実践タスク:
生成系処理のタイムアウト/ワーカー設計、重い処理の非同期化検討(将来はCelery導入余地)
ヘルスチェックエンドポイント(DB/S3/Secrets疎通チェック)
Qiita案:
「uWSGI本番運用ノウハウ:タイムアウトとワーカー設計」
【8. 品質保証(8–12時間)】
到達目標: 重要機能の自動テストと静的解析で品質担保
必須トピック:
pytest/DRFのAPITestCase、factory_boy、freezegun、moto/LocalStackでAWSモック
pre-commit(black/flake8/isort/mypy)、カバレッジ測定
実践タスク:
レポート生成・S3アップロードの統合テスト
認可/権限のテスト(ロール別に許可/拒否が正しく動く)
Qiita案:
「pytest×DRF×motoでS3連携を自動テストする」
【9. セキュリティ/コンプライアンス(6–10時間)】
到達目標: 生徒データの安全管理と監査対応
必須トピック:
S3のSSE(SSE-S3/KMS)、バケットポリシー、パブリックブロック、ライフサイクル
PIIのログ出力禁止、マスク、アクセス監査(誰がいつDLしたか)
CORS許可ドメイン最小化、HTTPヘッダのセキュア設定
実践タスク:
バケットにSSE必須ポリシーを設定、プレサインドURLの短期有効化
監査ログ(ダウンロード要求の記録)設計
Qiita案:
「システムのPII保護:S3暗号化と監査ログの設計」
【6–8週間スケジュール例】
週1–2: Python基礎、Django/DRF導入、最初の簡易API作成+Qiita2本
週3: Keycloak連携とPermission、CORS調整+Qiita1本
週4: S3/Secrets堅牢化(例外/プレサインドURL/暗号化)+Qiita1本
週5: PostgreSQL最適化(EXPLAIN/インデックス/N+1解消)+Qiita1本
週6: レポート生成の品質/パフォーマンス、日本語フォント対応+Qiita1本
週7: uWSGI運用、ヘルスチェック、ログ設計+Qiita1本
週8: テスト自動化/モック、セキュリティ総点検+Qiitaまとめ記事
コードリーディングの観点(優先チェック箇所)
学習したことをQiitaでアウトプットする前提でスケジュールを組んでいるのですが、ボリュームが大きすぎますね・・・SREの領域にも食い込んでいるし腰が重くなるな。
このプランを完遂できたら凄いんだろうけど、ちゃんと自分のペースで理解しながら進めたいし、2026年は他にも挑戦したいことがあるので、半分くらいのボリュームにして無理のないスケジュールにしたいと思います。
おわりに
年末年始は長期出張からの帰省からの引っ越しとバタバタしまくっていました。
昨年の反省から、少しでも睡眠と学習の時間を確保したくて、職場から徒歩圏内に引っ越しました。これで環境は整ったはずです。
これから始まる案件もなかなかヘビーなので、学習時間外にキャッチアップして食らいついていきたいです。