GoLandを使わずにVS codeとdockerでGoの環境構築してみた
俺はこいつと 旅に出る♪(ドカチュー!)
はい、久々の更新です。週1で更新してやらぁとか言ってといて何ですが、申し訳ございません!
今回ですが、Go言語を学ぶにあたり、通常の環境構築だと迷わずGoLandにすると思うのですが、
あまり利用しないにも関わらず課金するのもなんだかなという思いと、同時に使い慣れているDockerとVS codeで開発したいという思いから試してみました。
試行錯誤の上、なんとかできたのでまとめます。
※超初心者、及び自分へのメモとして普通のエンジニアの方ではそこまで記載しないよってレベルまで細かく記載します。
なお、前提条件は以下
目次
- Docker Desktop for Macをインストール
- VS codeのインストール
- 拡張機能のインストール
- Remote-Containersの設定をする
- コンテナの準備(compose作成→ volumeも同時に)
Docker Desktop for Macをインストール
Docker Desktopからチップを選んでdmgファイルをダウンロードする。
dmgファイルがDLされるのでダブルクリックすると、下記のポップアップよりクジラのマークをダブルクリックしてアプリをインストールする。
※ちなみに私の場合はこのクジラマークをダブルクリックすることが当初分からず、ひたすらdmgファイルをダブルクリックしてはこのポップアップが延々と出まくるという負のループで手こずった…多分自分だけ
VS codeのインストール
※日本語化については下記参照
junpei-sugiyama.com
拡張機能のインストール
VSCodeのExtensionであるRemote Containersをインストールする。
Dockerを動かしつつ、VS codeで開発していくのに必要なものです。
構造は下記です。
インストール手順について
VS codeの左タブにある検索窓で「remote - containers」と入力し、Remote – Containersが出てくるのでインストール
Remote-Containersの設定をする
実際に開発で利用するディレクトリをVSCodeで開いて、設定を行います。
Window左下のこのマークをクリックして
検索窓に「remote」と入力して、「Remote-Containers: Add Development Container Configuration Files...」がでてくるので、選択。
その後、再度上記の検索窓から「Remote-Containers: Add Development Container Configuration Files...」を選択。
検索窓にて「go」を入力し、Goを選択。
バージョン選択後、「OK」ボタンが出てくるので、OKをクリック。
右下に出てくるポップアップウィンドウの「Reopen in Container」をクリック。
以上でRemote-Containersの設定は完了!
コンテナの準備(compose作成→ volumeも同時に)
開発を行いたいディレクトリをマウントするため、docker-compose.ymlを作ります。
docker-compose.yml
version: "3" services: golang: image: golang:1.9.3-alpine3.7 tty: true volumes: - ./:/go environment: - "GOPATH=/go"
コンテナの中に入る
$ docker-compose exec golang ash /go # echo $GOPATH /go
goが入っているのが確認できます。
次にマウントできているか確認します。
$ docker-compose exec golang ash /go # ls -la
docker-compose.yml
ファイルが確認できたのでマウントできたことがわかります。
これで完了!
ちなみに私は上記の手順を実行しても、最初はなぜかマウントが確認できなかったのですが、VS codeを再起動すると成功しました!
あと、Dockerfileかdocker-composeの議論があるようですね。
https://shura.design/2020/08/11/archives/2604shura.design
以上!
参考文献
https://qiita.com/masakurapa/items/fa867451053e41b69126
qiita.com
https://yamavlog.com/environment-vscode-docker-golang-mac/
yamavlog.com
PATHってなに???
PATHとは何か?
お待たせいたしました!お待たせしすぎたかもしれませんっ!!!
はい、週1で更新すると周りに言いふらかしつつ、全く更新できませんでした。
今回Udemy講座を受講する中で何度も「PATHが通ってないから無理っす」ってエラーに遭遇しました。
振り返りとまとめを合わせて書き残したいと思います。
本来私が知りたかったのは後に「PATHを通すとは何か」ということだったのですが、こちらは後述します。
初心者でもなんとなく分かります。なんでこれが必要やねんってのを「初心者なりに」深掘りしていきます。
私はエンジニアではなくプログラミングを独学で学ぶおっさんなので、細かい間違いなどありましたらコメント欄から突っ込んでいただけると大変ありがたいです。
PATHはどんな場面で使用されるか
PATHとは何もプログラミングだけで利用される用語ではなく、例えば普段の仕事などでExcelを使いたいなどの場合でも利用されています。
たとえば、
・name : 個人フォルダ内の
・Documents : の中にある
・projects : の中にある
・office365 : というファイルの中にある
・excel : を動かす
という流れでエクセルが立ち上がり、PATHとはMacであれWindowsであれ、何かしらアプリやシステムを起動する際に使用され、PCを使う際にほとんどの人が使用しているものである。といえますね。
PATHを通すとは
それでは、本題であるPATHを通すとは何かについて触れたいと思います。そもそもPATHについてブログに記事化しようとしたのは、terminalでsudoコマンドを利用しようとしたら、
command not found
と返され、観ていたUdemy講座を止めて、ググりまくった結果
PATHが通ってなかった
ことが原因でした。
で、PATHを通すとは
※環境変数 = コマンドを実行するプログラムが保存されているディレクトリの場所を設定する変数
つまり、私の場合はsudoコマンドを利用するためのPATHが通ってなかったことになります。
必要なPATHを通す
必要なPATHを通すための流れとしては①必要なPATHがあるか検索
#echo $PATH
②必要なPATHを通す
#export PATH=$PATH:PATH名
②で重要なのが、必要なディレクトリを指定してPATHを追加しないと大変なことになるということ。(何が大変か、なんかここまで書いて面倒になったので引用記事を参照ください)
ちなみに私は結局PATHが通ってない云々以前にそもそもHomebrewをインストールしていなかったため、brewコマンドが使えなかったことが原因でした(Macユーザーは結構あるっぽい)
以上!!
最近、息子が歩き回るようになってきたので、これを書いてる時も何度も手を止めて助けに行ったり、遊んだりして時間かかっちゃいました。
息子が可愛すぎて親バカどころか、ただのバカになることに最近気づきました。
引用記事qiita.com
hara-chan.com
cha-shu00.hatenablog.com
qiita.com
ethicsとprofit
コンプライアンス!!!
本日は普段やっているプログラミングから離れて、私自身も勤めているスタートアップ企業の話を記載しようと思います。
久々の更新
3年ぶりの更新をさせて頂きます。
とはいえ、ずっとプログラミングは続けており、Djangoを扱うようになり、言語もPythonだけでなく、GOにも幅を広げました。そしてPCもMacBookにしました。
古くからの友人にも久々にエンジニアブログを更新することを告げ、自分にプレッシャーを掛けるつもりでも改めて更新しようと思います。
これまで読んでいただいた方もいれば、初めて読む方もいるので、改めて簡単な経歴紹介を行おうと思います。(ここまで真面目(-`д´-)キリッ
小さい頃から法律(中学2年で六法全書を買った)触れ、大学も法学部に進む。
卒業間近で、ロースクールに進学が決まっていたにも関わらず、何を思ったか盛大な厨二病を発症し、
「将来はCIAかMI6と仕事してぇな」と思い、警察庁(の公安部)か公安調査庁を目指すようになった。
特に公安調査庁は実際にCIAと仕事をしていると聞いた(官庁訪問でこっそり教えてくれた)ので、志望度は高かった。
当時司法試験の勉強で16時間/日くらい勉強していたため、国家公務員Ⅰ種試験(法律職)(以下、「国I」)も「司法試験にくらべたらm9(^Д^)」みたいなノリだった。
昔から僕は数学が異常に好き、いやもう趣味であったので、高校時代は何を思ったか、SAT mathを解いたりと本当に頭がおかしかった。
※高校時代は純粋な文系組
そこで、国Iの試験科目の一つである数的処理にはまり、朝起きて深夜まで解き続けることもあった。
www.path-to-success.net
なんだかんだギリギリで国Iに合格し、官庁面接ではまず警察庁を受けたが、面接官がとてもムカつくクソ野郎で「君公務員向いてないね」とか言われた合わない方だったので、途中でぶん殴りそうになったので面接を中断して帰った。(始まって20分くらい)
面接始まる10分前に本庁3階のトイレで金髪をスプレーで黒に染めたのもいい思い出である。(本当
結局、公安調査庁もどうせつまねー奴が面接するだろうと思い断念した。
体も鍛えていたので、Navy SEALsに入隊しようとかたまに厨二病を発症しながら大学を卒業。
その後、企業で法務をやったり、ベンチャーで財務担当したり、上場企業の投資事業部でボロ雑巾のように働いたりと色々あったが、今は優秀なエンジニアさんたちが大勢いる会社で働けて幸せである。
以上経歴。
これからは週1くらいで更新しようと思う。内容は主にUdemyの講座で学んだことを発揮する場にしていきたいと思います。
ディープラーニングの入り口、Kerasを張り倒す
ってことでディープラーニングの世界に触れてみる
Kerasって何ってそこの人のために↓
dev.classmethod.jp
employment.en-japan.com
qiita.com
Kerasのインストール~TensorFlowのバックエンドの設定
# Kerasのインストール $ pip3 install keras==2.0.5
# nanoエディタをインストール
$ apt-get install nano
# ファイルの記述の準備 $ mkdir ~/.keras $ nano ~/.keras/keras.json # TensorFlowをバックエンドで実行するため設定ファイルを記述 { "image_dim_ordering":"tf" "epsilon":1e-07, "floatx":"float32", "backend":"tensorflow" } # 記述後Ctrl+Xで保存を選択してnanoを閉じる
MNISTを試してみる
from keras.datasets import mnist from keras.models import Sequential from keras.layers.core import Dense, Dropout, Activation from keras.optimizers import Adam from keras.utils import np_utils # MNISTのデータを読み込む (X_train, y_train), (X_test, y_test) = mnist.load_data() # データをfloat32型に変換して正規化する X_train = X_train.reshape(60000, 784).astype('float32') X_test = X_test.reshape(10000, 784).astype('float32') X_train /= 255 X_test /= 255 # ラベルデータを0-9までのカテゴリを表す配列に変換 y_train = np_utils.to_categorical(y_train, 10) y_test = np_utils.to_categorical(y_test, 10) # モデルの構造を定義 model = Sequential() model.add(Dense(512, input_shape=(784,))) model.add(Activation('relu')) model.add(Dropout(0.2)) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.2)) model.add(Dense(10)) model.add(Activation('softmax')) # モデルを構築 model.compile( loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy']) # データで訓練 hist = model.fit(X_train, y_train) # テストデータを用いて評価する score = model.evaluate(X_test, y_test, verbose=1) print('loss=', score[0]) print('accuracy=', score[1])
結果…
60000/60000 [==============================] - 16s - loss: 0.2217 - acc: 0.9325 Epoch 2/10 60000/60000 [==============================] - 16s - loss: 0.1117 - acc: 0.9656 Epoch 3/10 60000/60000 [==============================] - 16s - loss: 0.0877 - acc: 0.9734 Epoch 4/10 60000/60000 [==============================] - 17s - loss: 0.0714 - acc: 0.9778 Epoch 5/10 60000/60000 [==============================] - 17s - loss: 0.0623 - acc: 0.9816 Epoch 6/10 60000/60000 [==============================] - 17s - loss: 0.0576 - acc: 0.9820 Epoch 7/10 60000/60000 [==============================] - 17s - loss: 0.0580 - acc: 0.9831 Epoch 8/10 60000/60000 [==============================] - 17s - loss: 0.0469 - acc: 0.9864 Epoch 9/10 60000/60000 [==============================] - 17s - loss: 0.0486 - acc: 0.9861 Epoch 10/10 60000/60000 [==============================] - 19s - loss: 0.0466 - acc: 0.9866 9728/10000 [============================>.] - ETA: 0sloss= 0.09370438802893359 accuracy= 0.9782
サンプルコードを手打ちしたので疲れる…
訓練データとテストデータ合わせて約7万件のデータを処理するので割と時間がかかる…
正答率は97.82%という。
ディープラーニングのサンプルといえばMNISTだけども、実務ではどのくらいのデータ量を処理するのか…
今回何より勉強になるのが、TensorFlowをバックエンドで動かすところ。
TensorFlow単一で書くとより複雑で何やっているか分かりにくいが、Kerasだとすっきりして分かりやすい。
ちょっとわくわくしてくる(;゚д゚)ゴクリ…
詳しい中身はまた今度分析してみる
Docker tool-boxでwindowsホストディレクトリをマウントする
①Docker machine
②Docker tool-box
と色々ある。私のような初学者だとdockerコマンドもいちいちググって実行するが、このホストディレクトリのマウントはかなり苦労したので備忘録として残す。
なお、これから記載する方法は
・Windows10 Home or Pro
・Docker tool-box
に限る。これ以外では通用しないことがあるのでご注意いただきたい。
失敗例から見ていきます。
通常下記の通り進めるとマウントできる(らしい)
docker run時のオプションとして-v /c/Users/[host directory]:/[container directory]を入れる.
すると,ホストのC:Users/[host directory]が,コンテナの/[container directory]にマウントされる.
docker run -v /c/Users/[host directory]:/[container directory] [container]
# 例として docker run -v /c/Users/Host/test:/test ubuntu /bin/bash
何が起こるかというと、上記のコマンドを行うとdocker runなので当然コンテナができる。
しかし…
# 作成されたコンテナを使用するためコンテナ起動 $ docker start [container ID] # 起動したコンテナに入る $ docker attach [container ID] You cannot attach to a stopped container, start it first
You cannot attach to a stopped container, start it first
は?
いやなんで入れないねんwってことで永遠と作成されたコンテナに入れません。docker ps -aで見ると確かに作成されているのは確認できるのに…
どうやらVirtualBoxとの連携バグからこうなるらしい(クソOracleめ)
そこで!大量のネットの情報を試しに試してたどり着いたのが以下の方法
# 事前にsrcディレクトリに適当にtest.txtを作成 # ホストユーザーのsrcディレクトリをubuntuイメージでマウント $ docker run -it -v //c/Users/#HOSTUSER/src:/src ubuntu /bin/bash # コンテナinするので確認 $ [container ID]# cd src $ [container ID]:/src# ls test.txt
ポイントは/をcの前に二重にすること!
これだけのために色んなサイト見ましたが、//cと記載あるのは少なかった
しかし、気づきましたが、Winows環境での開発は少ないのでもはやMacに乗り換えるのが必須かもしれません。
なぜならネット上の多くの情報がMac環境下での情報であり、Win環境は海外サイトを漁らないと出てこないことが多いからです…
そもそもdocker for windowsのHyper-Vとかクソ重い仮想マシンも使いにくい…
以上
Selenium+PhantomJSの実行環境を整える
以前エラーが出まくって原因探るうちに日が暮れたので、再度復習の意味で記載。が、また同じエラーが出て日が暮れたので…
本当はAbemaTVの将棋チャンネルで順位戦A級プレーオフ「羽生竜王vs稲葉八段」を観ながらやっていたので間違えまくった
・Docker上にUbuntuを構築
# DockerにUbuntuのイメージを導入 docker pull ubuntu:16.04 # Ubuntuを実行しシェルにログイン docker run -it ubuntu:16.04
・シェルにログイン後、PythonとSeleniumをインストールする
# ログインするとroot@〇〇でログインしたことが分かる # python3とpip3のインストール apt-get update apt-get install -y python3 python3-pip # Seleniumのインストール pip3 install selenium # BeautifulSoup4をインストール pip3 install beautifulsoup4
・PhantomJSをインストール
# PhantomJSの稼働に必要なライブラリをインストール apt-get install -y wget libfontconfig # バイナリをダウンロードしてインストール mkdir -p /home/root/src && cd $_ # root@〇〇:/home/root/srcとなりディレクトリに入る wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 # "phantomjs-2.1.1-linux-x86_64.tar.bz2' saved"で完了 tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 # なんかいっぱい表示されて震える cd phantomjs-2.2.1-linux-x86_64/bin/ # root@〇〇:/home/root/src/phantomjs-2.1.1-linux-x86_64/binに入る cp phantomjs /usr/local/bin/
ここまで書いたところで優勢だった稲葉八段がやばいことに気づき解説に食い入る…後手羽生さんの△6五角⇒△2八飛からの攻めがきつい…と思ったら△6五角と指され、稲葉八段が小刻みに揺れだす…
ではなく、よく間違えたのは日本語フォントが表示されるように調整するコード
この写経はつらい…
# 日本語フォントをインストール apt-get install -y fonts-migmix # フォントの設定を書き換える cat <<EOF > /etc/fonts/local.conf # ">"で書き換えができるようになる <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="pattern"> <test qual="any" name="family"> <string>serif</string> </test> <edit name="family" mode="assign" binding="strong"> <string>MigMix 2P</string> </edit> </match> </fontconfig> EOF
これでよし
PhantomJSが文字化けにならなくなる。
ここで△5六角(詰み筋は見えてまっせと言わんばかりの一手)というなんともえげつない手で稲葉八段がさらに追い詰められ、AIによる形成判断は「羽生竜王70:30稲葉八段」とされ完全におわt…
最後にコンテナIDをubuntu-phantomjsにコミットして終了
これが意外に後でかなり影響するので残しておく
参考にした本
Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう
- 作者: クジラ飛行机
- 出版社/メーカー: ソシム
- 発売日: 2016/12/06
- メディア: 単行本
- この商品を含むブログ (4件) を見る