書き捨てのPythonプロジェクトを生成するワンライナー

 書き捨てなのにプロジェクトとは🤔

前置き

 ここでは「書き捨てのPythonプロジェクト」を、下記の自分以外に需要のなさそうな要求を満たすものとします。

  • Pythonのちょっとしたスクリプトを書きたい
  • フォーマッタとリンターは欲しい
    • black, isort, flake8, mypy
  • 環境を汚したくない
    • venvを使いたい
  • Visual Studio Codeで書きたい
  • Git管理は今のところやる気がない
    • Git管理をするならGitHubのテンプレートなどを利用したほうが良いでしょう

 全ての要求を満たそうとするとディレクトリが出来てしまうため、「プロジェクト」としました。

本題

 今回のワンライナーは以下の通りです。Linuxを想定しています。(ワンライナーと言いつつ && を利用しているのはレギュレーション違反かもしれません……)

mkdir hoge && curl -L https://github.com/ns6251/script-pypj/archive/refs/heads/main.tar.gz | tar xzf - -C hoge --strip-components 1

 やっていることは、GitHub上のレポジトリのアーカイブをローカルに落としてきて、展開しているだけです(今回参照しているレポジトリに、筆者が前置きで書いた要件を満たすためのファイルが置いてあります)。そのため、「書き捨てのPythonプロジェクト」以外にも適用できます。

 このあとは、venvの作成と pip installをして、Visual Studio Codeで開くという手順がありますが、ワンライナーとしてどこまで含めるかの問題でしょう。

解説

以下が一般化(?)したものです。[フォルダ名] は一致させる必要があります。

mkdir [フォルダ名] && curl -L https://github.com/[ユーザー名]/[レポジトリ名]/archive/refs/heads/[ブランチ名].tar.gz | tar xzf - -C [フォルダ名] --strip-components 1

 GitHubは図のように、UIからレポジトリのZIPアーカイブをダウンロードできるようになっています。このリンク末尾の拡張子を .zip から .tar.gz に変更することで、GZIP形式でもダウンロードできます。今回はcurlコマンドを利用してアーカイブをダウンロードしています。

ZIPアーカイブでダウンロードするボタン

 tar コマンドでアーカイブを展開しています。
標準入力でアーカイブのデータを受け取るため、z で明示的にgzip形式であることを教えてあげる必要があります。
また、fのあとに - を指定することで標準入力を受け取ることを示しています。
そして、--strip-components 1 で [レポジトリ名のディレクトリ]/[ファイル] のように展開されるものからレポジトリ名を削って、直下にファイルが展開されるようにしています。
あと、-C は展開先のディレクトリの指定です。

まとめ

ワンライナーはタイトル詐欺

Leave a Reply