PyConに初めて参加してみて学んだこと
初めてPyConに参加しましたので、参加したセッションで学んだことをまとめました! 普段考えなくても動くようなプログラムの裏側を学ぶことができて、 よりたくさんのことができるようにするための糧となりました^^
何より、PyConで未経験から転職したというLTが最も勇気づけられて・・・ 私もPyConでエンジニア転職したい!!!!!!!(本気です!笑)
●印象に残ったセッションと学んだこと●
-あなたとPython今すぐパッケージン
-トイル撲滅記
1日目
あなたとPython今すぐパッケージン(pipenvの話)
今まで何気なくpipを使っていたけれども、pipの仕組みを学ぶきっかけになりました。
(あとから調べた) pipとは パッケージイントールするためのツール。パッケージは、PyPI(Python Package Index)というPythonパッケージを管理する団体で管理しているものを利用する。
virtualenvとは
パッケージを切り分ける仮想環境。
プロジェクトごとにパッケージのバージョンを依存関係を切り替えるために構築する。
pipfileとは
依存ライブラリのフォーマット。 requirement.txtの置き換え。
pipenv登場前:virtualenvを構築後、pipでvirtualenvにパッケージをインストール ↓
pipenvたるものが登場
※pipenvとは、「pip+virtualenv+pipfileを包括的に取り扱うツール」
pipenv:「pip install pipenv」のコマンドだけで環境構築もパッケージインストールもできる
(けど遅い)
疑問:個人的には、pipenvじゃなくてrequirement.txtでも間に合うのですが、
pipenvの方が良いのは具体的にはどんな開発をするとき?
2日目
トイル撲滅記
普段保守運用で課題感を感じているからか、やはりSRE好きだなと思いました。
「SREはトイル撲滅がメイン」
トイルとは・・・「本番サービスに関する作業で手作業で繰り返し行われ自動化することが可能であり戦術的で長期的な価値を持たず作業量がサービスの成長に比例する」
Case
環境構築作業(職人技になっている、機能開発開始までに時間がかかる)
ー>Docker Compose
Docker-composeのみで開発できるようになるし、環境差異によるバグがおさえられる (やりたい!!!)
Case
デプロイ作業(手順書作成ー>1代ずつ縮退・更新、チェッカーが必要)
ー>Amazon ECSの利用
コンテナオーケストレーション、サーバー管理不要、スケジュール不要
ー>CI/CDの利用
※CI(Continuous Intergration) / CD(Continuous Delivery, Deploy)
プッシュするとー>Unitテストー>Flake8ー>Radon(コードの複雑さを図るツール)
走る。
レビューの手間が省ける。 書き方が統一化されて保守しやすくなる。 ( やりたい!!!)
Case
管理サーバにログインできない。ログを見てわかる状態が望ましい。
Effective Python->Noneを返すよりもExceptionを返そう
Exceptionでloggingするべき。
特別な例外を出すことでやりたいことの明確化。
・リクエストに関するデータ収集
・SQLがどれだけ発行されているかもわかる
非エンジニアでも調査できるようになった。 (素晴らしい!)
Pythonで学ぶUnixプロセス
普段何気なく使っていたbashの仕組みを学べて良かった。
大前提:すべてのプログラムはプロセスによって動いている。
プログラムの実行時にプロセスも生まれ、終了したらプロセスも死ぬ
アプリケーションプログラムに対して提供する機能を呼び出すこと。
プログラムが動作するときの2つの処理空間
カーネルとユーザーランド
カーネル:ハードウェアとやりとり
ユーザーランド:カーネルとやり取りする空間。ユーザーランドの仕組みをシステムコールという
プロセス:
あらゆるコードはプロセスで実行される
プログラムの実行時にプロセスも生まれ、終了したらプロセスも死ぬ
プロセスにはIDがある
省略されてpidと呼ばれる
os.getpid()で現在実行しているプロセスを確認できる
プロセスにはリソースの制限がある
・カーネルによって1プロセス毎にリソースが制限される
(本題)プロセスは子プロセスを作れる:
fork(2)システムコールで子プロセスを作れる
fork(2)は親プロセスのコピー
fork(2)からifが分岐する
親が死んでも子は生き残る。
生き残った子プロセスを孤児プロセスという
親プロセスは、子プロセスが終わるまで待てる
os.wait()でできる
ゾンビプロセス:
子プロセスのほうが先に終了
親プロセスはwaitで子プロセスの終了ステータスを要求しない
孤児とゾンビのち外
先に自分が死んでwait待ちなのがゾンビ
デーモンプロセス:
端末から制御されるのではなく、バックグラウンドから制御
デーモン化はプロセスを完全に制御端末やシグナルから切り離せる