ほぼ老人のプログラミング日記

定年後の平凡なサラリーマンの趣味の日記

開発環境

私が仕事を始めた頃のプログラマーは「紙と鉛筆」があれば仕事ができる時代でしたが (コーディングもコーディングシートに手書きしていた)、今時「紙と鉛筆」でのプログラミングなんてありえないのでパソコンや開発ツール等の道具が必要です。知識だけなら本を読むだけでもなんとかなるとは思いますが、身につかないと思いますし、やはり作ったものは動かしてみたいと思うのが人情でしょう

で、私の開発環境です。

パソコン

MacBook Pro を使っています。 2 年ほど前に整備済品を購入しました。Intel Mac です。整備済品なので特にカスタマイズもしてませんがメモリだけは沢山積んである (32GB) のを選んで購入しました。

ディスプレイは 13 インチで老眼が進んだ身としては少々つらいのですが、フットプリントが小さいほうがよかったのと、ディスプレイは外部ディスプレイをつなげればよいと思ったので 13 インチにしました。

仕事では、Let's Note だったり、ThinkPad だったりするので操作方法の違いになれないこともありますが、仕事と趣味で異なる種類のパソコンを使うことによる気持ちと頭の切り替えでできてよいような気がします。

開発環境とは無関係なのですが、実は整備済品とはいえ新品の Mac を買うのはこれが 4 台目です。最初に買ったのは 30 年位前に買った Macintosh LC です。

ja.wikipedia.org

私が初めて買ったパソコンです。その後、Macintosh LC630 に買い換えました。

ja.wikipedia.org

LC は人に譲ってしまいましたが、LC630 はまだ持ってます。インターネットに初めて接続したのも LC630 からでした。

LC630 以降は DynabookThinkPad だったり、自作デスクトップだったりで、MacBook Pro を買うまでは Windows PC がメインでした。

私自身が使った Mac はこんな感じですが、息子用に iMac DV を買っています。

ja.wikipedia.org

この iMac DV は、ロジックボードだけ形を変えてまだ持っています。iMac DV のロジックボードを PC/AT 用の電源で動かすようにして、確か、Maintosh IIcx の筐体に入れる改造記事に触発されて真似して作ったものです。私は IIci の筐体に入れました。

ブックマークに登録しておいた改造記事のサイトにアクセスしてみましたが、もうどこも残ってないようです。が、Internet Archive に少し残ってました。

このサイトでは iMac を Sun SPARC station IPX の筐体に入れています。

web.archive.org

IDE

Visual Studio Code です。これ以上の説明はいらないと思いますが、以下の機能拡張を導入しています。

正直、なんで入っているのかわからないものもあるのですが、とりあえず現在入っているのが上記のものです。

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 のコーディングに関係しているのはこんなところです。

こんな感じの見た目になっています。 f:id:tiger62shin:20220125213345p:plain

Python 実行環境

PythonPython そのものやライブラリのバージョン依存が厳しい (バージョンを適切に管理する必要がある) ので 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 を使う

ところです

私が現時点で行き着いている手順です

  1. プロジェクトフォルダ直下に .devcontainer フォルダを作成
  2. 特定のコンテナ用のフォルダ (Dockerfile などを格納) を作成

    .devcontainer/python
    
  3. .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
    
  4. Dockerfile からは requirement.txt に記載されているパッケージをインストールするようになっているので .devcontainer/python/requirement.txt を作成。今はこんな感じ

    autopep8
    flake8
    psycopg2
    requests
    
  5. .devcontainer/docker-compose.yml を作成

    version: '3'
    services:
      python38:
        restart: always
        build: python
        container_name: 'python38'
        working_dir: '/workspace'
        tty: true
        volumes:
          - ..:/workspace:cached
    
  6. .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 が実行できるようになりました。