新卒エンジニアとして半年間働いてきて、現場でさまざまなことを勉強させていただきました。その中でも、もっと早く知っておきたかった便利なツール、Python の書き方など、幅広いあれこれを記事にしたいなと思います。
あれこれ、というざっくりとした括りになってしまっているのでまずは紹介したいものを示しておきたいと思います。
- git submodule
- Fabric3
- Flake8
- Python
- 型ヒント
- 整形文字列 f-string
git submodule
git submodule とは、git のレポジトリをサブモジュール化して複数のプロジェクトで共有することができる機能のことです。これを使うことで一度開発したコードを別のプロジェクトで簡単に再利用できます。例えばTORICOでは、 TORICO-ID のソーシャルログイン機能や決済機能だけでなく、ユーティリティ関数などを Django, Vue, Flutter それぞれのフレームワークでまとめたレポジトリが用意されてあります。
導入も至ってシンプルです。プロジェクト内で
git submodule add <リポジトリURL> <インストールパス>
たったこれだけで、今まで開発してきたコードを再利用することができます。わざわざプロジェクト間でコピペをしてくる必要はありません。さらに、git submodule はバージョン管理もしてくれます。サブモジュールを更新しても影響があるのはそのプロジェクト内だなので安心してサブモジュールの改良をすることができます。
1点注意として、submodule はメインのプロジェクト内で git clone や git pull を行っても自動で更新されることはありません。そのため、
git submodule update (初回のみ -i オプションで初期化)
コマンドを忘れずに実行する必要があります。
Fabric3
こちらは Python のモジュールの一つで、所定のアクションをコマンド一つで呼び出すことができます。例えば、デプロイするときの一連の流れを Python コードにしておくことで、ターミナルに fab deploy と入力するだけでその流れを自動で行ってくれるようになります。流れは以下のように記述します。
env.hosts = ['app1.sample.com', 'app2.sample.com']
def deploy(): # 通知などを行う
slack_announce('deploy')
with cd ('/var/src'):
run('git checkout master')
run('git pull origin master')
run('git submodule update')
このように一連の流れをコードとして残しておくことで、それをコマンド一つで呼び出すことができるようになります。さらに、新規に加入したメンバーでも簡単にデプロイができるというメリットがあります。その環境に慣れていない人が、例えば git submodule などのコマンドを忘れる心配もありません。また、私のような実務経験の無い人でもコードを確認することで流れを理解することができます。
TORICO では上記の git submodule を使ってほぼ全てのプロジェククトに deploy, ssh, flake8(後述), dsh (docker 環境にSSH)のコマンドが用意されています。
Flake8
こちらも Python のモジュールで、自動でコードレビューをしてくれます。導入は pip でインストールするだけです。実行は flake8 コマンドとオプションをターミナルにします。
flake8 --exclude="*migrations/*,venv/*,.venv/*,~* .
すると、このようにコードレビューをして規約に反する部分を教えてくれます。規約コードも教えてくれるため、わからない部分は検索できるようになっています。また、どうしても諸事情で変更できない場合は
from django.contrib import admin # NOQA: F401
とコメントをつけることで、指定した規約コードの違反を行単位で無視させることもできます。
TORICO では毎回オプションを入力するのは面倒なため、上の Fabric3 を使って実行を簡単にしています。
Python 型ヒント
Python3.5 から導入された機能で型ヒントというものがあります。これは引数や帰り値の型をコードに書くことで可読性を向上させることができる機能です。
def hello(name: str) -> str:
return f'hello, {name}.'
型ヒントはあくまでも補助的な役割のため、宣言とは異なる型を渡したところでエラーになることはありません。ただ、PyCharmでは型ヒントとは違う型を渡すと警告をしてくれます。可読性が飛躍的にあがるので、ぜひとも書くことを癖にしたいなと思っています。
Python F文字列
上の例でもしれっと使っていましたが、F文字列を使用することで .format 部分を短縮することができます。さらに、f文字列では変数だけでなく式なども使用できます。
print({a} + {b} = {a + b}) # format では a + b はエラーになる
format で記述するとコードが長くなる傾向があるので、スッキリと書けるf文字列は積極的に使用しています。
最後に
今回は現場で知った便利なあれこれを記事にしました。個人で勉強をしているとフレームワークや言語の知識は増やせますが、運用に関わる部分はなかなか知ることができないと思います。便利だなと思ったら、ぜひ積極的に使用してみてください。