開発環境
私が仕事を始めた頃のプログラマーは「紙と鉛筆」があれば仕事ができる時代でしたが (コーディングもコーディングシートに手書きしていた)、今時「紙と鉛筆」でのプログラミングなんてありえないのでパソコンや開発ツール等の道具が必要です。知識だけなら本を読むだけでもなんとかなるとは思いますが、身につかないと思いますし、やはり作ったものは動かしてみたいと思うのが人情でしょう
で、私の開発環境です。
パソコン
MacBook Pro を使っています。 2 年ほど前に整備済品を購入しました。Intel Mac です。整備済品なので特にカスタマイズもしてませんがメモリだけは沢山積んである (32GB) のを選んで購入しました。
ディスプレイは 13 インチで老眼が進んだ身としては少々つらいのですが、フットプリントが小さいほうがよかったのと、ディスプレイは外部ディスプレイをつなげればよいと思ったので 13 インチにしました。
仕事では、Let's Note だったり、ThinkPad だったりするので操作方法の違いになれないこともありますが、仕事と趣味で異なる種類のパソコンを使うことによる気持ちと頭の切り替えでできてよいような気がします。
開発環境とは無関係なのですが、実は整備済品とはいえ新品の Mac を買うのはこれが 4 台目です。最初に買ったのは 30 年位前に買った Macintosh LC です。
私が初めて買ったパソコンです。その後、Macintosh LC630 に買い換えました。
LC は人に譲ってしまいましたが、LC630 はまだ持ってます。インターネットに初めて接続したのも LC630 からでした。
LC630 以降は Dynabook や ThinkPad だったり、自作デスクトップだったりで、MacBook Pro を買うまでは Windows PC がメインでした。
私自身が使った Mac はこんな感じですが、息子用に iMac DV を買っています。
この iMac DV は、ロジックボードだけ形を変えてまだ持っています。iMac DV のロジックボードを PC/AT 用の電源で動かすようにして、確か、Maintosh IIcx の筐体に入れる改造記事に触発されて真似して作ったものです。私は IIci の筐体に入れました。
ブックマークに登録しておいた改造記事のサイトにアクセスしてみましたが、もうどこも残ってないようです。が、Internet Archive に少し残ってました。
このサイトでは iMac を Sun SPARC station IPX の筐体に入れています。
IDE
Visual Studio Code です。これ以上の説明はいらないと思いますが、以下の機能拡張を導入しています。
- Japanese Language Pack for VS Code
- Python extension for Visual Studio Code
- Visual Studio Code Remote - Containers
- Visual Studio Code Remote - SSH
- Visual Studio Code Remote - SSH: Editing Configuration Files
- Visual Studio Code Remote - WSL
- Visual Studio Code Remote Development Extension Pack
- Jupyter Keymaps Extension for Visual Studio Code
- Jupyter Extension for Visual Studio Code
- Renderers for Jupyter Notebooks in Visual Studio Code
- Pylance
- vscode-icons
- File-specific icons in VSCode for improved visual grepping
正直、なんで入っているのかわからないものもあるのですが、とりあえず現在入っているのが上記のものです。
Remote - XXX が入っているのは Remote Development Extension Pack でまとめて導入されたものです。目的は Docker コンテナを使いたかったので、Remote - Containers が入っていればよかったはずです。
ファイルアイコンとかも綺麗に表示されていた方が嬉しいのでいくつか入れました。
Visual Studio Code の設定は未だ試行錯誤中ですが、主な設定を記載します。
まずは色関係
"workbench.colorCustomizations": { "editor.background": "#1E1E1E", "editor.lineHighlightBorder": "#1E1E1E", "editorLineNumber.activeForeground": "#ffffff", },
背景色を黒にしているのとカレント行の行番号の色を白にしています。工夫したのは、editor.lineHighlightBorder を背景色と同じ色に設定してカレント行の枠線が表示されないようにしたところです。
Python 固有に下記のようなものを設定しています。
"[python]": { "editor.fontFamily": "SourceHanCodeJP-Regular", "editor.fontSize": 12, "editor.insertSpaces": true, "editor.tabSize": 4, "editor.rulers": [128], "editor.renderIndentGuides": false, "files.insertFinalNewline": true, "files.trimTrailingWhitespace": true, },
Python 固有にしたのは他の言語もやってみたいので設定を別にしたかったからです。
あと、エクスプローラーのフォントサイズが大きすぎたので
"window.zoomLevel": -0.7,
で、全体のズームレベルを下げて、エディタ部分は editor.fontSize で個別に設定しています。
他にも色々設定していますが、Python のコーディングに関係しているのはこんなところです。
こんな感じの見た目になっています。
Python 実行環境
Python は Python そのものやライブラリのバージョン依存が厳しい (バージョンを適切に管理する必要がある) ので Anaconda 等でバージョン管理を行うと聞いていたので、なんとなく「面倒だなー」と思っていました。
Mac の環境に色々な Python のバージョンやライブラリを入れたくなかったのと、間違えたときに元に戻したり、クリーンにしたりするのが面倒なんじゃないかとも思っていました。
VM Ware や ViurtualBox 等の仮想環境も考えましたが、なんとなく大げさすぎる気もしていました。
このように色々と考えているうちに以前「Software Design」という雑誌で Docker の記事を読んで、とりあえずコンテナを動かしてみたことを思い出し、これが使えるんじゃないかと思い (この段階では Docker コンテナの中で Visual Studio Code 動かせないかなーと思ってました) 色々と調べたところ Visual Studio Code から Docker コンテナに接続して開発ができることがわかりました。
Visual Studio Code で Docker コンテナを利用する方法については Google で「vs code docker コンテナ」等のキーワードで検索するとさまざまなサイトがヒットするので、そのようなサイトを参照しながら設定しました。
ポイントは
- Dockerfile をマニュアルで作成
- 複数のコンテナを使いたいので、docker compose を使う
ところです
私が現時点で行き着いている手順です
- プロジェクトフォルダ直下に .devcontainer フォルダを作成
特定のコンテナ用のフォルダ (Dockerfile などを格納) を作成
.devcontainer/python
.devcontainer/python/Dockerfile を作成
いらんもんも入っていますが、だいたいこんな感じですFROM python:3.8 USER root RUN apt-get update RUN apt-get -y install locales && \ localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 ENV LANG ja_JP.UTF-8 ENV LANGUAGE ja_JP:ja ENV LC_ALL ja_JP.UTF-8 ENV TZ JST-9 ENV TERM xterm ADD . /code WORKDIR /code RUN apt-get install -y vim less x11-xserver-utils python3-tk graphviz RUN pip install --upgrade pip RUN pip install --upgrade setuptools RUN pip install -r requirements.txt
Dockerfile からは requirement.txt に記載されているパッケージをインストールするようになっているので .devcontainer/python/requirement.txt を作成。今はこんな感じ
autopep8 flake8 psycopg2 requests
.devcontainer/docker-compose.yml を作成
version: '3' services: python38: restart: always build: python container_name: 'python38' working_dir: '/workspace' tty: true volumes: - ..:/workspace:cached
.devcontainer/devcontainer.json を作成
{ "name": "Tools by Python", "dockerComposeFile": "docker-compose.yml", "service": "python38", "workspaceFolder": "/workspace", "extensions": [ "MS-CEINTL.vscode-language-pack-ja", "ms-python.python", "ms-toolsai.jupyter" ], "settings": { "python.formatting.autopep8Args": [ "--max-line-length", "128" ], "python.linting.pylintEnabled": false, "python.linting.flake8Enabled": true, "python.linting.flake8Args": [ "--max-line-length=128" ], "python.autoComplete.extraPaths": [ "/usr/local/lib/python3.8/site-packages/" ], }, "postCreateCommand": "", }
特別な設定は行っていませんが、autopep8, flake8 を pip でインストールしているのでその設定を行なっています。ちょっと行儀の悪い設定です。
これで、Viaual Studio Code でプロジェクトフォルダを開くと Docker コンテナが開始して Python が実行できるようになりました。