Available languages:
ソースコードを取得したあとの環境構築のためのメモ
githubから落としてきたレポジトリなど、ソースコードを取得した後、これどうやって動かしたり読んだりしたらいいんだろうってなったときのためのメモ。
今後も追記していくよ👶
python
pythonで環境構築するよ。mise使用前提でいきます。
前提知識
- pythonのランタイムはバージョン別にバイナリが分かれている(あたりまえ体操〜🎵)
- miseとかを入れているなら、miseが全てをうまくやってくれる
- パッケージはプロジェクトごとにvenv、つまり仮想環境を作ってそこにためていくのがセオリー
- golangとかとは異なる発想
- npmとかyarnのような発想と言える。pythonが使うnode_modules的なものがvenvだと思っちゃえばいい(暴論だけど一旦これでいいと思う)
- venvは公式の仕組み: https://docs.python.org/ja/3.13/library/venv.html
- venvが出てくる前、たとえばpython2とかの時代は、依存関係が異なるプロジェクト同士で衝突してぶち壊れることが度々あった
- ではvenvに入れていくパッケージをどう管理するかというと、pip, uv, poetryという手段がある。pipが公式だけど、それなりに不便。ということで色々他のやつが使われがち
- ということで、人からもらったレポジトリで環境構築する場合、どれが使われているのかを見分ける必要がある
プロジェクトの設定ファイル
- パッケージを管理するファイルは大体下記3パターン
- pyproject.toml: uvやpoetry
- これにuv.lockを追加で使うことで依存や依存の依存のバージョンまで決定しきることができる
- requirements.txt: pip freezeで作れるやつ。依存パッケージのリスト
- たまにrequirements-dev.txt のように開発用のファイルが分かれている場合もあるので、READMEなどを確認する
- pyproject.toml: uvやpoetry
- python自体のバージョンはpyproject.tomlなら書いてあるけど、requirementsにはないので、 .python-versionを探してみるとよい
- たまにREADMEに書いてある
インストールしていく
- pythonのバージョンがわかったらmiseでインストールする
mise use --path . python@XXXXX
python --version # 確認
mise cfg # 設定ファイルを一応確認
- パッケージをインストールしよう。基本はuv一本足打法でなんとかなる
# まずuv自体をインストール
mise use --path . uv@latest
# そんでcreate venv
mise exec -- uv venv
# それからactivate venv
# これをやらないと後段のコマンドがシステム全体のpythonに効いちゃうかもしれない
source .venv/bin/activate
# いよいよパッケージインストール。パッケージ管理ファイルの種類により分岐します
# どれも違ったらがんばって調べてください
## A: pyproject.toml + uv.lock
mise exec -- uv sync --frozen
## B: requirements.txt
mise exec -- uv pip install -r requirements.txt
## C: 自分の新規プロジェクト
mise exec -- uv init
mise exec -- uv add "pybluemonday==0.0.9" # specific version
mise exec -- uv add pybluemonday # latest
- もしもダウンロードできないパッケージがあったらreplaceしよう
# やったことはない
uv pip install -r requirements.txt --extra-index-url https://pypi.private.com/simple
IDEの設定
- pythonインタプリタとして、.venv/bin/pythonを設定すればOK
- これで行ける理由としては、下記2点。
- IDEは「このpythonインタプリタがあるvenvにモジュールがインストールされているんだな」ってわかってくれる
- pythonのバージョンについてもIDEはわかってしまう。じつはこの.venv/bin/pythonが、venvが作られるまさにその瞬間にpythonコマンドに紐づいていたバイナリへのシンボリックリンクになっているから
go
前提知識
- goのランタイムはバージョン別にバイナリが分かれている(あたりまえ体操〜)
- GOROOTで使うバイナリを指定するよ
- GOROOTを設定するということはgoバージョンを選択しているということでもあるわけ
- miseとかを入れているなら、miseのバイナリ置き場みたいなのがあって、そこに使ったことのあるgoバージョンが布置されていると思う
- パッケージはgo env GOPATHした結果の/pkg/modに一元的に入れ込まれていく
- jsなどとは異なり、C++のように同じ場所にどかんと置く
- でもpnpmはC++的なやり方をやっている
- go envはgoのツールチェーンが使う値を出してくれるので便利(要するに環境変数がないときのgoデフォルトとかを踏まえたうえで最終的な値を見せてくれる)
- jsなどとは異なり、C++のように同じ場所にどかんと置く
バイナリインストール
- go.modにgo言語のバージョンがあるので、まずはそれをmiseでインストールする
mise use --path . go@XXXXX
echo $GOROOT # miseのディレクトリになっているはず
mise cfg # 設定ファイルを一応確認
パッケージインストール
- パッケージをインストールしよう
go mod tidy
- もしもダウンロードできないパッケージがあったらreplaceしよう
mkdir dummy
go mod edit -replace gihub.com/AAA/aaa=./dummy
IDEの設定
- GOROOTを、上の「バイナリインストール」後にecho $GOROOTして表示されるパスに設定すればOK
- IntelliJの場合は「設定して〜」って出るはず
- パッケージがインストールできていれば、これだけで全て補完されます