架空のプロジェクトのためのDjangoCongress JP
2018年5月19日に東京・日本橋のサイボウズにてDjangoCongress JP 2018が行われた。 日本で最初のDjangoのカンファレンスである。 今回、発表者として登壇した。
発表の動機や内容
2017年8月から今のプロジェクトが始まった。 長い時間をかけて歴史のあるプロジェクトを近代化するという取り組みを行った。 その経験の中で、案件特有の事柄を除いた体験談を共有すれば何かに役に立つのではと思い、CfPに応募した。 あまりDjangoに関係のないプロポーザルであったが、無事通った。
内容は体験談で構成されているが、まとめる際の補助線として使ったのがDjangoのアップデートとTwelve Factor Appである。 体験談、つまり業務で行ったことは多岐にわたるが、話をまとめる際にその2つを中心に据えてスライドを組み立てた。
発表スライド
参加者の反応
Room1「レガシーDjangoアプリケーションの現代化」 #djangocongress pic.twitter.com/hbMRey0zmC
— mamix1116 (@mamix1116) May 19, 2018
これ聞いてます→レガシーDjangoアプリケーションの現代化 *フィクション #djangocongress
— うに (@urchin_hat) May 19, 2018
実話を元にしたフィクションです#djangocongress #room1
— Ryuji Tsutsui(忌中) (@ryu22e) May 19, 2018
#djangocongress プロフィールはノンフィクション
— tell_k (@tell_k) May 19, 2018
この話は実話に基づくフィクションです #djangocongress #room1
— 吉村 潤平 (@jumpyoshim) May 19, 2018
#djangocongress
— ysaito (@ysaito8015) May 19, 2018
room1 Hayao Suzuki @CardinalXaro レガシーDjangoアプリケーションの現代化
iridge
暖かみのある手作業だ #djangocongress #room1
— Ryuji Tsutsui(忌中) (@ryu22e) May 19, 2018
#djangocongress ログのちょっとした調査もエンジニアがしないといけない。わかる。
— tell_k (@tell_k) May 19, 2018
#djangocongress 長い旅が始まる
— tell_k (@tell_k) May 19, 2018
ながいたびがはじまる...(フィクション) #djangocongress #room1
— 吉村 潤平 (@jumpyoshim) May 19, 2018
ながいたびがはじまる #djangocongress
— Shinya Okano (@tokibito) May 19, 2018
#djangocongress Twelve-Factor App を元に、現状をアセスメント
— tell_k (@tell_k) May 19, 2018
dev_setting.py stg_setting.py prod_setting.py ...
— 吉村 潤平 (@jumpyoshim) May 19, 2018
うわああああ #djangocongress #room1
これはながいたび #djangocongress
— うに (@urchin_hat) May 19, 2018
体験談(フィクションです) #djangocongress #room1
— 吉村 潤平 (@jumpyoshim) May 19, 2018
#djangocongress
— ysaito (@ysaito8015) May 19, 2018
"あきらめましょう"
Djangoアップデートに魔法のような方法は存在しません #djangocongress #room1
— 吉村 潤平 (@jumpyoshim) May 19, 2018
#djangocongress Django 「残念w 簡単にアップグレードできると思った?w」
— tell_k (@tell_k) May 19, 2018
djangoのアップデートに魔法のような方法は存在しない、粛々とやる #djangocongress
— Shinya Okano (@tokibito) May 19, 2018
#djangocongress MIDDLEWAREの変更が3rdパーティのとかだと大変
— tell_k (@tell_k) May 19, 2018
ミドルウェアが1.11から変更されていて、設定ファイルの名前変更だけでは動かなかった。 #djangocongress #room1
— Ryuji Tsutsui(忌中) (@ryu22e) May 19, 2018
#djangocongress
— ysaito (@ysaito8015) May 19, 2018
N+1 問題 職人の技が光る
django-debug-toolbarはAPIサーバーだと使いにくかった。代わりにAWS X-Rayを使うようにした。 #djangocongress #room1
— Ryuji Tsutsui(忌中) (@ryu22e) May 19, 2018
架空なのに伏せ字w #djangocongress #room1
— Ryuji Tsutsui(忌中) (@ryu22e) May 19, 2018
#djangocongress
— ysaito (@ysaito8015) May 19, 2018
架空のプロジジェクト。すごい
架空なので黒塗り #djangocongress
— Shinya Okano (@tokibito) May 19, 2018
x-rayでクエリチューニング #djangocongress
— Kouichi Nishizawa (19) (@koty) May 19, 2018
ざわざわ... #djangocongress #room1
— 吉村 潤平 (@jumpyoshim) May 19, 2018
#djangocongress
— ysaito (@ysaito8015) May 19, 2018
色々頑張ってる views にちょっと頑張り過ぎだといひ
#djangocongress 最近、肩身の狭い https://t.co/Xn7hnwzmco ちゃんじゃん。
— tell_k (@tell_k) May 19, 2018
なぜ人はMVCのC部分(Djangoで言うView)にロジックを書いてしまうのか… #djangocongress #room1
— Ryuji Tsutsui(忌中) (@ryu22e) May 19, 2018
ユニットテストを書きつつリファクタリング、地道に粛々と #djangocongress
— Shinya Okano (@tokibito) May 19, 2018
#djangocongress
— ysaito (@ysaito8015) May 19, 2018
ここから django 成分が薄くなります
#djangocongress 「Djangoの話はここまでだ」「ざわっざわっ」
— tell_k (@tell_k) May 19, 2018
神 https://t.co/8ipD9BNuFM あるよねーwww #djangocongress
— salexkidd (@salexkidd) May 19, 2018
settingsの不思議なあれあるわー #djangocongress
— ひだしゅん (@hidashun) May 19, 2018
settingsファイルを分けずに環境変数に出せと。。。 #djangocongress
— Kouichi Nishizawa (19) (@koty) May 19, 2018
#djangocongress 増える環境、増えるhttps://t.co/GLflOI0VT3問題
— tell_k (@tell_k) May 19, 2018
Djangoで環境変数?ならdjango-environを使おうか。 on @Qiita #djangocongress #room1 https://t.co/3SI5h3u7HY
— 吉村 潤平 (@jumpyoshim) May 19, 2018
#djangocongress
— ysaito (@ysaito8015) May 19, 2018
架空のプロジェクト/settings/ 下、すごい
ただモデルに持ってけないUtilsちゃんがいるのも確かなので、その場合はlibsちゃんを掘ってわかりやすい名前のファイルを置いて、わかりやすい関数やクラス名ちゃん以外手がないのも事実...!!
— salexkidd (@salexkidd) May 19, 2018
#djangocongress
Docker化! #djangocongress
— Shinya Okano (@tokibito) May 19, 2018
<開発者の名前>_settings.py #djangocongress
— salexkidd (@salexkidd) May 19, 2018
ポプ子とは #djangocongress #room1
— Ryuji Tsutsui(忌中) (@ryu22e) May 19, 2018
ログに少しでもお金かけられる会社はいい会社説 #djangocongress
— salexkidd (@salexkidd) May 19, 2018
#djangocongress ポプ子
— tell_k (@tell_k) May 19, 2018
#djangocongress
— ysaito (@ysaito8015) May 19, 2018
ポプ子(CloudWatch Alarm)から slack 上で通知が来る
ECSタスクでdjangoのmanagementコマンドを実行 #djangocongress
— Kouichi Nishizawa (19) (@koty) May 19, 2018
Django のコマンドはECSタスク化した #djangocongress
— Shinya Okano (@tokibito) May 19, 2018
#djangocongress
— ysaito (@ysaito8015) May 19, 2018
環境変数地獄
どういうことかというと地獄です
ポプ子 「修羅みあるわー」 #djangocongress #room1
— 吉村 潤平 (@jumpyoshim) May 19, 2018
#djangocongress 「はい地獄です。これはどいうことかというとですね。地獄です。」
— tell_k (@tell_k) May 19, 2018
環境変数地獄あるある #djangocongress
— Shinya Okano (@tokibito) May 19, 2018
#djangocongress
— ysaito (@ysaito8015) May 19, 2018
環境変数が増えたとき、職人の手数が光る
#room1 で話されている環境変数地獄の詳細、気になる #djangocongress
— SHIMIZU Taku (@takuan_osho) May 19, 2018
#djangocongress Twelve Factor Appに従った結果、増えすぎた環境変数、各社どうやって管理してんの?
— tell_k (@tell_k) May 19, 2018
pycharm でステップ実行は甘え。pdbでコンソールデバッグだ。(意訳)というお言葉を頂いた #djangocongress
— Kouichi Nishizawa (19) (@koty) May 19, 2018
しかしdockerに出して良いことばかりではないんだな。そりゃそうか。。。 #djangocongress
— Kouichi Nishizawa (19) (@koty) May 19, 2018
参加者の反応に対する発表者の弁明
- 業務として行ったことを共有する以上、具体的な案件情報を公開するわけにはいかない。そのため「実際のプロジェクトを元にしたフィクション」とした。なおプロフィールはノンフィクションである。
- 「ながいたびがはじまる」の元ネタはこちらを参照。言葉は知っていたが元ネタはスライドを作る際に調べた。
- Slackのbotの画像として、ロボットのような画像を使う例が多い気がするが、それだと面白くないので煽りに定評のあるキャラクターの画像を使うことにした。環境ごとに違う画像を採用している。
- 「はい地獄です。これはどいうことかというとですね。地獄です。」Twelve Factor Appに付きまとう概念であるが、実際にやるまで知ることができなかった。Twitterを見たり発表後にお話しした人も似た地獄に遭遇している。「設定はすべて環境変数で扱う」と「環境変数地獄」はセットの概念であるというは重要な知見であり、広く知られるべきものである。冷静に考えると当たり前であるような気もするが、それにしても触れられることが少ないと思う。
最後に
- 社内でレビューしてくださった皆様。架空のプロジェクトの匿名度を上げたり、内容のブラッシュアップにご協力いただきありがとうございました。
- DjangoCongress JPのスタッフ、サイボウズの皆様。素晴らしい機会を提供いただきありがとうございました。
- 自分。写真で見ると「え?こんなに太っているの?」と思うのでどうにかしたい。がんばります。
追記(2019年11月14日)
以前書いた会社の旧技術ブログのエントリを新技術ブログに移植したものが公開されたのでこちらにもリンクを掲載しておく。