データ構造化 100本ノックしようと環境構築したらapt-getで苦しんだ

#背景
データを扱うにあたってpythonでより早く処理できるようになりたいと思い、何かいい教材はないかと探していたところ、こんなレポジトリを見つけた。
[The-Japan-DataScientist-Society/100knocks-preprocess](https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess)

データサイエンティスト協会が作成したレポジトリになり、pythonm R, SQLでデータの加工と分析する問題を100問集めたものになります。

「これこそ求めてたものじゃん」と喜々として取り組むも、利用にあたり、Dockerなどの環境構築が必要だと知りました。
実際に公式ドキュメントを参考にインストールを進めてみるもエラーに散々苦しめられました。類似のエラーを探してググるも、クリティカルなものはあまりなかったため、今後100本ノックに挑戦しようと思う人たちに向けて、私なりに記事を残してみた。

#前提
・windows10 pro,WSL2(Ubuntu-20.04),Doker Desktop環境で使用しています。


#本題
##apt-get系のコマンドエラー
公式ドキュメントに従い、前もってDoker Desktopをインストールし、``git config``では``git config -global core.autocrlf input``と指定する(falseでも可)。
そしてgitでクローンし、そのまま``docker-compose up -d``をすると下記のエラーで詰まってしまった。

```
Status: The command '/bin/bash -o pipefail -c apt-get update     && apt-get -y install apt-transport-https     && apt-get -y install apt-utils wget unzip vim less     && apt-get install -y --no-install-recommends lsb-release=11.1.0ubuntu2 gnupg=2.2.19-3ubuntu2.1     && sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'     && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -     && apt-get update     && apt-get install -y --no-install-recommends libpq-dev=14.0-1.pgdg20.04+1     && apt-get remove -y lsb-release gnupg     && apt-get autoremove -y     && rm -rf /var/lib/apt/lists/*' returned a non-zero code: 100, Code: 100

```
エラー文の内容が理解できず、色々調べて1日経ったところであるissueを見つけた。
[ERROR: Service 'notebook' failed to build : Build failed](https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess/issues/93)

エラーの症状は完全一致ではないものの、エラー文がapt-getで始まっている点や、``returned a non-zero code: 100, Code: 100``部分は共通している。
リンク内で提示されているリンクを確認してみると、
https://pkgs.org/download/libpq-dev
Libpq-devのダウロードページが表示され、そこではそれぞれのOSに対応したlibpq-devのバージョン一覧が記載されていた。

私が使用しているのはUbunts-20.04なので、確認してみると、libpq-dev_14.1-1.pgdg20.04+1_amd64.debが最新だった。
そのため、ものは試しにnotebook配下のDockerfileファイルの

```Dockerfile:Dockerfile
&& apt-get install -y --no-install-recommends libpq-dev=14.0-1.pgdg20.04+1 \
```
部分を以下のように書き換えてみる。



```Dockerfile:Dockerfile
    && apt-get install -y --no-install-recommends libpq-dev=14.1-1.pgdg20.04+1 \

```

すると上記のエラーは解決した。
libpq-devは、PerlでDBIからPostgreSQLサーバーへ接続するためのDBD::Pgをインストールするために必要になるコマンドで、
libpgの後にバージョンを指定しているのだが、PostgreSQLのバージョンが11月11日にバージョンアップし14.1がリリースされ、古いバージョンになってしまったので原因のように思える。
そのため100本ノック構築をする際はPostgreSQLのバージョンを確認して、適宜書き換える必要があるかもしれない。

##hostが見つからない
postgressのバージョンを更新し、``docker-compose up -d --build``すると表示のエラーは解消された。
ただ、エラーは解消されてはまた現れる。

postgreSQLサーバーは元々構築してないので、preprocess_knock_Python.ipynbに直接、こんな形で書き換えて、
カーネルを実行してみると今度はこんなエラーが表示された。

```py:preprocess_knock_Python.ipynb

pgconfig = {
    'host': 'db',
    'port': '5432',
    'database': 'dsdojo_db',
    'user': 'postgres',
    'password': 'postgres12345',
    }

# pd.read_sql用のコネクタ
conn = psycopg2.connect(**pgconfig)


```

```
OperationalError: could not translate host name "db" to address: Unknown host

```
今度はこんなエラーが出てきた。
要するにdbというホストを見つけられないと言っている。
色々、試行錯誤したが``host``部分を``localhost``とする事で解決した。
ちなみにyml側の``DATABASE_HOST`を`dbを変更しても解消されなかった。
一体なぜなんだ…

```preprocess_knock_Python.py
pgconfig = {
    'host': 'localhost',
    'port': '5432',
    'database': 'dsdojo_db',
    'user': 'postgres',
    'password': 'postgres12345',
    }
```



#感想
正直、データサイエンスの領域でdockerを学ぶ事になるとは思っていなかったです。
概要は何となく掴みましたが、動きやコマンド操作はいまだによくわからない部分が多々あります。

原因を探るにあたって公式のisuueを先に見た方がエラー解消がより早く進むかもしれません。
PythonだけならCSVをダウンロードしてローカルでロードする方向もありますが、それでは疑問は残るし、SQLで取り組めなくなる。そして何よりも気持ちよくない。

とりあえず、100本ノックを始められる状態になったので、本来の目的に戻ってコツコツ解いてみたいと思います。

#参考
・[Windows ユーザー向けのgit利用時の注意](https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess/issues/1)
・[ERROR: Service 'notebook' failed to build : Build failed](https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess/issues/93)
・[【Python】os.environ で KeyErrorが発生 #](https://githubmemory.com/repo/ycu-engine/community/issues/11)
・[libpq-devのインストール - PostgreSQLクライアントのヘッダとライブラリ](https://ubuntu.perlzemi.com/blog/20200409174004.html#:~:text=libpq%2Ddev%E3%81%AF%E3%80%81Perl%E3%81%A7,%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82&text=%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%9F%E3%80%81PostgreSQL%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88,%E3%82%92%E5%8F%82%E8%80%83%E3%81%AB%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82)
・[apt-get - パッケージの操作・管理 - Linuxコマンド](https://webkaru.net/linux/apt-get-command/#:~:text=apt%2Dget%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AF%E3%80%81Debian,%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%80%8D%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82)
・[The psycopg2 module content](https://www.psycopg.org/docs/module.html)