Pythonは現在、最も広く使われているプログラミング言語の1つです。パワフルでありながらもシンプルで、ほぼすべての開発環境で使用できます。

2021年のStack Overflowの調査によると、Pythonは、開発者が最も使いたいプログラミング言語に選ばれています。

Stack Overflowの調査結果
Stack Overflowの調査結果

Pythonは、Jupyter Notebook、Google Colaboratory、オンラインコンパイラなどのツールのおかげで、インストールせずにすぐに使い始めることができます。

しかし、初心者レベルを超え、汎用言語の真の力を享受したい(特に複雑なアプリケーションを作成したい)と思うのであれば、遅かれ早かれCLI(コマンドラインインターフェース)の使い方を学ぶ必要があります。

多くの開発者が認めているように、Pythonを学習する上で最も躊躇する項目の1つがCLIです。しかし、いくつかのコマンドを習得すればすぐに使いこなせます。

この記事では、Pythonで開発する上で最も有用なコマンドをご紹介します。

コマンドラインインターフェースの概要

コマンドラインインターフェース(CLI)は、テキストベースのプログラムです。プログラムの実行や、オペレーティングシステム(OS)に関連する作業、例えばファイルの作成や管理などに使用されます。

CLIは、キーボードからコマンドの形式で入力を受け付け、シェルまたはコマンドインタプリタに渡します。シェルは、入力されたコマンドを解釈、実行し、結果を出力として返します。

CLIは異なるシェルを実行できます。以下のスクリーンショットは、2種類のシェル、PythonシェルとBashシェルでのCLIの様子です。

PythonシェルとBashシェル
PythonシェルとBashシェル

CLIとシェルはしばしば混同されますが、以下のような違いがあります。

  • CLI─テキストベースのインターフェース。コマンドを入力し、出力を取得する。異なるシェルを実行可能。
  • シェル─オペレーティングシステムと対話可能なコマンドインタプリタ。

システムで実行されているすべてのプログラムに、コマンドが含まれています。毎日接しているウィンドウシステム(GUI)も、コマンドを起動し、オペレーティングシステムと対話する仲介役として構成されています。

Python開発におけるCLIの必要性

一人前のフルスタック開発者になるには、コマンドラインに関する確かな知識が必要です。ほとんどのバックエンドフレームワークで、何らかの形でCLIとの直接のやりとりが必要になります。自分でアプリケーションをデプロイするなら、コマンドラインの存在は無視できません。

現在では、数々のオンラインサービスでPythonを実行でき、IDEがあればさらに簡単にプログラムを実行可能です。しかし、ウェブ開発(特にバックエンド)、タスクの自動化、ブロックチェーン、SSHによるリモートコンピュータの使用、DockerなどのPythonと連携するツールの管理などでは、CLIの操作は避けて通れません。

実際、PythonにはTyper、Argsparse、Clickなど、CLIアプリケーション構築用のライブラリが多数あるため、ただのCLIユーザーから、CLIアプリケーション作成者になることができます。それどころか、この事実からは、CLI環境とPythonの密接な関係性が伺えます。

CLIを習得すれば、Pythonプログラマーとしてより効率的に開発を行うことができます。また、PHP、C、C++、Javaなど他のプログラミング言語を使用する際にも応用可能ます。

CLI入門

どのOSを使用しているかによって、コマンドラインの使い方に違いがあります。OSごとにファイル構成やデフォルトのコマンドシェルは異なり、CLIを開いて対話する方法も異なりますのでご了承ください。

今回は、最も一般的な3つのオペレーティングシステム、Windows、Mac、Linuxについて見ていきます。

Windows

Windowsは、その価格と使いやすさから最も人気のあるデスクトップOSです。WindowsでCLIを使用するには、「コマンドプロンプト」または「Windows PowerShell」を開きます。

なお、Windowsでのパスは「/」ではなく、「\」(日本語環境では「¥」)を使用します。

またWindowsでは代替案として、Bashシェルの動作をエミュレートするコマンドライン「Git Bash」をインストールできます。Git Bashを使用すると、後ほどご紹介するほぼすべてのUnixコマンドを実行できます。

Mac

Macでは、内蔵アプリケーション「ターミナル」からコマンドラインを使用できます。ターミナルはLaunchpadで検索するか、「アプリケーション」の中の「ユーティリティ」フォルダ内にあります。

Linux

Linuxでは、ディストリビューションによって様々な選択肢があります。通常は「Ctrl+Alt+T」を押すと、システムのデフォルトのターミナルが表示されます。

すると、以下のようなウィンドウが表示されます。

CLI
CLI

Phtyon開発で役立つCLIコマンド23選

CLIを開いたら、Python開発の作業を楽にしてくれる便利なシェルコマンドを試してみましょう。

インストール系コマンド

Pythonをインストールする方法は、恐らく100万通り近くありますが、状況によってはコマンドでインストールしたほうが便利な場面もあります。

以下、各OS上にPythonをインストールする様々なコマンドをご紹介します。

1. Chocolatey

Windowsには、デフォルトではパッケージマネージャーが搭載されていないため、代わりにChocolateyを使用します。Pythonを含むプログラムをコマンドラインから直接インストールすることができます。

Chocolateyのインストール後、以下のコマンドを実行してください。

choco install python --pre 

2. Homebrew と Pyenv

macOSには、デフォルトでPython 2.7がインストールされていますが、現在では非推奨です(macOS 12.3以降削除されています)。コミュニティ全体もPython 3に移行しています。Pythonのバージョンを効率的に管理するには、pyenvのようなプログラムを使用してください。

コマンドラインを開き、以下のコマンドで最新版のHomebrew(Chocolatey同様のパッケージマネージャー)をインストールします。

/bin/bash -c "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

次に、以下のコマンドでpyenvをインストールします。

brew install pyenv

Python 2以外のバージョンをインストールし、グローバルなPython実行ファイルに設定します。

pyenv install 3.10 # Version you want
pyenv global 3.10.4 # Sets that version as default

これで、Pythonを呼び出すと、pyenvで設定したバージョンが実行されます。

python
# Python 3.10.4 ....
# >>>

3. apt、pacman、dnf

Pythonは、オープンソースソフトウェアで広く使われているため、多くのLinuxディストリビューションにプリインストールされています。システムにPythonがなければ、パッケージマネージャーを使用してインストールすることができます。

Debianベースのディストリビューション(Ubuntu、Linux Mint、Kali Linux)では、「apt」(advanced package toolの略)を使用します。

sudo apt update
sudo apt install python3

デフォルトのPythonインタプリタとしてPython 3を設定する場合は、以下のコマンドを使用します。

sudo apt install python-is-python3

Archベースのディストリビューションでは、公式のパッケージマネージャ「pacman」を使用します。

sudo pacman -S python

FedoraやRPMベースのLinuxディストリビューション(Red Hat、CentOS)では、「dnf」を使用します。

sudo dnf install python3

インタプリタ系コマンド

Pythonコマンドとそのパッケージマネージャー「pip」の主要なフラグ(コマンドラインの機能)を簡単に見ていきいましょう。

4. python

pythonコマンドには「フラグ」と呼ばれる、コードの実行の振る舞いを変更する機能があります。

まず、Pythonファイルを実行するには、単純にインタプリタを呼び出して、拡張子「.py」を含むファイル名を指定します。

python helloworld.py

もしフラグの意味がわからなくなったら、以下の3つの形態の「help」フラグのいずれかを使用してください。

python -?
python -h
python --help

実行中のPythonのバージョンを表示するには、以下のコマンドを使用します。

python -V
python --version

.pyファイルを開いたり編集したりせずにPythonコードを実行する場合は、commandフラグを使用してターミナルから直接実行することができます。

# Hello, World!
python -c "print('Hello, World!')"

m」フラグは、Pythonモジュールをスクリプトとして実行します。これは、組み込みのvenvモジュールを使用して仮想環境を作る場合に非常に便利です。

python -m venv .venv

5. pip

pipコマンドは、Python Package Index(PyPI)からパッケージを探し、依存関係を解決し、指示されたバージョンのパッケージをインストールします。

Pythonパッケージをインストールするには、「pip」に続けてインストールしたいパッケージの名前を入力するだけです。

以下のコマンドを実行すると、最新バージョンのパッケージがインストールされます。

pip install django

特定のバージョンが必要であれば、以下のコマンドを実行してください。

# pip install package==version
pip install django==4.0.4

1つのプロジェクトに複数のユーザーが携わる場合には、依存関係を追跡する必要があり、通常は「Requirementsファイル」を使用します。「r」フラグを使用すると、テキストファイルからパッケージを読み込み、インストールできます。

pip install -r requirements.txt

もう一つのよく使われる機能が「freeze」。環境にインストールされたパッケージのバージョン一覧を出力してくれるため、これを利用すれば、依存関係をRequirementsファイルに出力することができます。

pip freeze >> requirements.txt

権限系コマンド

Pythonはスクリプトやファイル操作を得意とする言語ですが、こうした作業を行うには、OSの権限がどのように機能しているか、理解しておく必要があります。

6. sudo、runas

Unixベースのシステム(macOS、Linux、BSD)では、前述のインストールのような、特定の作業を行うためのスーパーユーザー権限が必要です。

sudoコマンドを使用すると、こうしたコマンドの実行のため、一時的に管理者権限を取得することができます。

以下は、ueberzug(画像プレビュー用Pythonパッケージ)をグローバルにインストールする例です。

sudo pip install ueberzug

Windowsでは、別のユーザーまたは管理者としてスクリプトを実行するRunasがこれに相当します。

runas /noprofile /user:Administrator cmd

また、Gsudoのようなプロジェクトもあります。他のWindows内蔵コマンドに比べて、はるかに簡単に権限を昇格することができます。

:: Installs gsudo
choco install gsudo

:: Reads a file named MySecretFile.txt
gsudo type MySecretFile.txt

7. chmod

chmodは、Unixのファイルやディレクトリの権限の変更に使用されます。

Pythonスクリプトを実行可能にするのが一般的な使用例です。

# Makes mypythonscript.py executablechmod +x
mypythonscript.py

スクリプトを実行可能にしたら、「./」を使用して直接実行できます。

# Runs the script
./mypythonscript.py

移動系コマンド

Python開発者は、コマンドラインインターフェースでファイルシステム内を頻繁に移動することになります。続いては、Pythonでのプログラミングの際にシステム内の移動で使用する、必須コマンドをご紹介します。

8. ls、dir

ディレクトリ(フォルダ)の中身を一覧表示するには、ls(Unix)またはdir(Windows)コマンドを使います。CLIで最初に覚えるのは、恐らくこのコマンドでしょう。

以下は、構文の使用例です。

ls # Shows the contents of the working directory
ls mydirectory

ローカルファイルシステムのフォルダの中身を表示する例は、以下の通り。

ls test_python/
# classes_error.py radius.py test-Django

このコマンドには、数多くの便利なフラグがあります。例えば、「ls -al」をエイリアスにして、隠しファイル(ファイル名がドットで始まるファイル)や、各ファイルのモード、サイズ、日付を表示するのによく使用されます。

alias ls="ls -al"

# Results
total 20
drwx------ 3 daniel daniel 4096 ene 16 19:13 .
drwxr-xr-x 36 daniel daniel 4096 may 17 22:18 ..
-rw------- 1 daniel daniel  32 nov 17 2020 classes_error.py
-rw------- 1 daniel daniel 327 nov 10 2020 radius.py
drwx------ 4 daniel daniel 4096 ene 16 01:07 test-Django

WindowsではGit Bashでlsを使用するか、内蔵のdirコマンドを利用します。

dir

9. pwd

pwdは、print working directory(ワークディレクトリの表示)の略で、その名前の通り、現在位置するディレクトリのフルパスを表示します。

pwd
# /home/daniel/github/HTML-site/images

ターミナルで自分の位置がわからなくなったときは、このコマンドの出番です。

Windowsでは、パラメータなしでcdコマンドを使用することで、同じ出力を取得することができます(注意:Unixで同じコマンドを使用すると、ホームディレクトリに移動します)。

# Only on Windows
cd
# D:\Folder\subFolder

10. cp

グラフィカルなファイルマネージャーを使用したファイルのコピーは、直感的ですが非効率的です。このコマンドを使えば、システム上のあらゆる種類のファイルをコピーすることができます。

cp old_file.txt copy_old_file.txt

ディレクトリの内容をすべてコピーするには、cp -rを使用します。

cp -r originaldirectory/ newdir

Windowsでcpに相当するコマンドはcopyです。

copy old_file.txt copy_old_file.txt /a

11. cat、type

テキストファイルの内容をエディターで開かずにターミナルで表示するには、Unixの場合catmoreless、Windowsの場合はtypeを使用します。

cat old_file.txt # Unix
type old_file.txt # Windows

# Content
Hi there I hope you're enjoying the article ...
as much as I've enjoyed writing it!
End of the sample.

12. mv、move

mvコマンドは、あるディレクトリから別のディレクトリにファイルやディレクトリを移動する(基本的にはカット&ペースト)、または移動先が存在しなければ、ファイル名を変更するコマンドです。

# Rename files
mv source_file.txt renamed_file.txt
# File to another directory
mv renamed_file.txt newdir/

ファイルの移動にパターンマッチも使用できます。例えば、以下のコマンドを実行すると、すべての.pyファイルが別のフォルダに移動します。

mv *.py mypythondir/

Windowsでの同等のコマンドはmoveで、ほぼ同じ機能があります。

# Windows
move source_file.txt renamed_file.txt

13. rm, del

ファイルやディレクトリを削除するには、rmコマンドを使用します。

ファイルを削除する場合は、以下のようになります。

rm file_to_remove.txt

空のディレクトリを削除するには、recursive(-r)を使用します。

rm -r dir_to_remove/

コンテンツを含むディレクトリを削除するには、force(-f)とrecursiveを使用します。

rm -rf dir_with_content/

Windowsでの同等のコマンドがdelです。このコマンドには、前述した誤操作防止のフラグがないため、慎重に扱ってください。

del \mywindowsdir

14. exit

Pythonのプログラミングが終了したら、シェルセッションは終了してOKです。通常、exitコマンドで使用中のターミナルを終了することができます。

exit

このコマンドはWindows、Unixの両方で動作します。

コマンドラインエディター

コマンドラインに慣れてくると、コードの編集のためにウィンドウを切り替えたり、マウスを使ったりするのは、煩雑に感じられるはずです。

コマンドラインに留まりながらコードを書くことができれば、手間を削減できるだけでなく、チームメンバーから一目置かれる存在に。

このセクションでは、最も使われているコマンドラインエディターをいくつかご紹介します。

15. Vim/Neovim

Vimとそこから派生したNeovimは、主にコマンドラインで使用されるキーボードベースのテキストエディターです。2021年のStack Overflowの調査によると、開発者に愛用されているエディターの中で、4位と1位にそれぞれランクインしています。

開発者が愛用するコードエディター内訳
開発者が愛用するコードエディター内訳

Vimは、LinuxとmacOSにデフォルトでインストールされています。サーバーとやりとりする際に最も使用されているエディターです。Windowsでは、Vimのページから実行可能なインストーラを使用してインストールする必要があります。

インストール後、コマンドラインで「vim」と入力して起動すれば、準備完了です。

vim

起動すると、テキストベースのインターフェースが表示されます。複数のキーボード操作を組み合わせて、Pythonのコーディングで必要なすべてのアクションを実行することができます。

Vimの操作の習得はやや複雑ですが、一度使いこなせるようになれば、しばらくは他のエディターには戻れないはず。

Vim
Vim

16. Nano

Nanoは、主に簡単な編集に使われるコマンドラインテキストエディターです。

例えば、コードに構文エラーが発生した場合、いちいちエディターを開いて修正するのは面倒ですが、Nanoを使えば、CLIからすぐに修正可能です。

nano

17. Emacs

Emacsは、拡張性とカスタマイズ性に優れたテキストエディターです。Pythonプログラミングに特化したセクションがあり、開発体験を向上する豊富なプラグインが利用できます。

Emacsは、ほぼすべてのオペレーティングシステムで利用可能です。インストールするには、公式サイトのダウンロード手順をご覧ください。

コマンドラインからEmacsを開くには「no window system」(-nw)を使用します。

emacs -nw

開発ツール

Pythonの開発では、コードの記述だけでなく、仮想環境、バージョン管理システム、デプロイツールなどの操作も求められます。

以下のコマンドを習得すると、Pythonでのあらゆるアプリケーション開発に応用することができます。

18. virtualenv/venv

仮想環境は、Pythonの開発で使用される重要な技術です。各プロジェクトで使用するパッケージを軽量なフォルダに分離することができます。フォルダ名は「.venv」が一般的です。

Python 3.3以降では、内蔵のvenvモジュールを使用して仮想環境を作成することができます。

# .venv being the name of the virtual environment
python -m venv .venv

virtualenvは外部プロジェクトで、内臓のコマンドに比べて高速で拡張性があります。仮想環境を作成するには、まずvirtualenvパッケージをインストールしてください。

# Installs virtualenv
pip install --user virtualenv

# Creates a .venv virtual environment
virtualenv .venv

次に、仮想環境を有効にします。WindowsではcmdとPowerShellのどちらを使用するかによって、以下のいずれかのコマンドを実行します(PowerShell推奨)。

:: PowerShell
.venv\Scripts\Activate.ps1
:: Cmd
.venv\Scripts\activate.bat

LinuxやmacOSでは、以下のコマンドを実行します。

source .venv/bin/activate

19. Git

バージョン管理は、ソフトウェア開発において最も重要な作業の1つです。これによって、コードの変更をすべて把握し、他の開発者と協力して、開発プロセスの全体像を明確に捉えることができます。

Gitは、現在最も使われているバージョン管理システムです。ダウンロードページからインストールすることができます。

インストール後、ターミナルから以下のコマンドを実行すると、利用可能な機能をすべて確認できます。

git help

リポジトリを作成するには、git initを使用して、リポジトリの名前を指定します。

git init name_repository
Initialized empty Git repository in /home/daniel/name_repository/.git/

なお、これはあくまでローカルのGitリポジトリです。すべての変更をオンラインで保存する、リモートリポジトリを作成するには、GitHubBitBucketのようなプラットフォームを使用してください。

リモートリポジトリを複製するには、「git clone」にリポジトリのソースを指定します。以下は、GitHubのリポジトリをSSH経由で複製する例です。

git clone [email protected]:DaniDiazTech/HTML-site.git
...
Cloning into 'HTML-site'...
remote: Enumerating objects: 24, done.
remote: Counting objects: 100% (24/24), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 24 (delta 6), reused 21 (delta 4), pack-reused 0
Receiving objects: 100% (24/24), 4.98 MiB | 438.00 KiB/s, done.
Resolving deltas: 100% (6/6), done.

20. Docker

Dockerを使用すると、Pythonアプリケーションを軽量でポータブル、かつ完全に隔離されたコンテナとして、簡単にパッケージングし、リリースすることができます。開発とデプロイの両方が考慮されており、すべてのチームメンバーが同じ設定で作業を行うことができます。

Dockerを使用するには、使用するオペレーティングシステムに応じて、公式サイトのインストール手順に従って入手してください。

利用可能なDockerコマンドの一覧を表示するには、以下を実行してください。

docker help 

Docker Composeの詳しい実行方法については、公式ドキュメントをご覧ください。

21. Grep

Grepは、プレーンテキストファイルのパターンマッチに使用される重要なコマンドラインユーティリティです。

典型的な使用法として、ある単語がファイル内で何回繰り返されているかを調べることができます。

grep -ic python pythondocument.txt
2

上の例は、pythondocument.txtファイル内で「Python」(大文字小文字の区別なし)が見つかった回数です。

Windowsでは、findstrがこれに相当しますが、完全に同じプログラムではありません。Windowsでgrepを利用するには、Git Bashを使用します。

findstr /i /C python pythondocument.txt
2

22. HTTPie

HTTPieはコマンドラインHTTPクライアントで、ウェブサービス(Python APIのテストやサードパーティサイトなど)と簡単に通信することができます。

公式ドキュメントにあるように、HTTPieはほとんどすべてのパッケージマネージャーからインストールできます。また、Pythonのパッケージもあるため、pipでもインストール可能です。

pip install httpie

リモートAPI(ここではGitHub API)に問い合わせる例を示します。

http GET https://api.github.com/users/danidiaztech
HTTP/1.1 200 OK
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
...

23. ping

pingは、事実上、すべてのオペレーティングシステムでデフォルトで利用可能なCLIコマンドです。IPアドレスにデータパケットを送信し、データの送信と応答の受信に要する時間をテストし、結果をミリ秒単位で表示します。

このコマンドは主に2つのマシン、たとえばローカルマシンとウェブサーバー上のPythonアプリとの接続の確認に使用されます。

ping kinsta.com
PING kinsta.com(2606:4700:4400::ac40:917d (2606:4700:4400::ac40:917d)) 56 data bytes
64 bytes from 2606:4700:4400::ac40:917d (2606:4700:4400::ac40:917d): icmp_seq=1 ttl=50 time=686 ms

コマンド一覧

最後に、今回の記事でご紹介したコマンドを以下の表にまとめます。

コマンド 説明
choco Windows上でパッケージをインストール
brew macOSのパッケージマネージャー
apt, pacman, dnf 各Linuxディストリビューションのパッケージマネージャー
python Pythonインタプリタの実行
pip Pythonのパッケージマネージャー
sudo, runas 権限の設定に使用されるUnixとWindowsのプログラム
chmod ファイルの権限を変更
ls ディレクトリの内容を一覧表示
pwd 現在のディレクトリを表示
cp ファイルとディレクトリのコピー
cat ファイルの内容の表示
mv, move ファイルとディレクトリの移動(名前の変更
rm, del ファイルとディレクトリの削除
exit 現在のシェルセッションの終了
vim, neovim 効率的なテキストエディター
nano 簡単な編集用のテキストエディター
emacs 最もカスタマイズ性に優れるエディター
virtualenv, venv 仮想環境の生成
git バージョン管理システム
docker アプリケーションのコンテナ化
grep パターンマッチユーティリティ
http ウェブサービステストユーティリティ
ping ネットワーク接続のテスト
kill プログラムの終了

まとめ

Pythonは、最も習得が容易なプログラミング言語の1つです。ただし、コマンドラインを実行するにあたって、必要なコマンドの知識が不足している場合には、つまずく可能性があります。

この記事では、コマンドラインと、Pythonの開発で使用される最も一般的なコマンドをご紹介しました。

Pythonの開発で、他にも便利なコマンドをご存知ですか?以下のコメント欄でぜひお知らせください。

Daniel Diaz

独学のPython開発者、テクニカルライター。長年にわたって学習を続けており、ゼロからソフトウェアを構築すること、その過程を魅力的な記事で紹介することを楽しんでいる。Xアカウントはこちら。