Python3.5.3+conda+Jupyter Notebookでpyarrow(apache arrow)を使えるようにする
pythonのライブラリには、apache Arrowではない、arrowという日付や時刻に関する処理を行うライブラリもあるので注意。
ドキュメントでは、pipでインストールできると書いてあるのに、 pipではそんなパッケージはないと怒られた。
chie8842@chie-no-ubuntu:~/work/tensorflow$ pip install pyarrow Collecting pyarrow Could not find a version that satisfies the requirement pyarrow (from versions: ) No matching distribution found for pyarrow
JIRAを見ると、pipはarrow0.2では使えなくて、次のバージョンから対応する予定らしい。
https://issues.apache.org/jira/browse/ARROW-240
仕方ないのでconda環境構築。
※3/8現在、pyarrowの対象バージョンは、2.7,3.4,3.5のみ。
最新のanaconda3-4.3.0はpython3.6ベースなので、
python3.5.2ベースのanaconda3-4.2.0を入れる。
chie8842@chie-no-ubuntu:~/work/tensorflow$ pyenv install anaconda3-4.2.0 chie8842@chie-no-ubuntu:~/work/tensorflow$ pyenv local anaconda3-4.2.0 chie8842@chie-no-ubuntu:~/work/tensorflow$ python --version Python 3.5.2 :: Anaconda 4.2.0 (64-bit) ## 上記でpythonバージョンが切り替わっていない場合は、以下を実施して環境を更新する chie8842@chie-no-ubuntu:~/work/tensorflow$ pyenv rehash chie8842@chie-no-ubuntu:~/work/tensorflow$ conda create -n py3.5.3-conda4.2.0 python=3.5.3 anaconda chie8842@chie-no-ubuntu:~/work/tensorflow$ source ~/.pyenv/versions/anaconda3-4.2.0/bin/activate py3.5.3-conda4.2.0 (py3.5.3-conda4.2.0) chie8842@chie-no-ubuntu:~/work/tensorflow$ conda info -e # conda environments: # py3.5.3-conda4.2.0 * /home/chie8842/.pyenv/versions/anaconda3-4.2.0/envs/py3.5.3-conda4.2.0 root /home/chie8842/.pyenv/versions/anaconda3-4.2.0 (py3.5.3-conda4.2.0) chie8842@chie-no-ubuntu:~/work/tensorflow$ conda update conda (py3.5.3-conda4.2.0) chie8842@chie-no-ubuntu:~/work/tensorflow$ conda install -c conda-forge pyarrow
ついでにほかのライブラリもインストールしておく。
(py3.5.3-conda4.2.0) chie8842@chie-no-ubuntu:~/work/tensorflow$ conda install matplotlib seaborn scikit-learn
インストールされているライブラリ一覧を見る
(py3.5.3-conda4.2.0) chie8842@chie-no-ubuntu:~/work/tensorflow$ conda list (-n environment_name)
jupyter notebookを立ち上げる
jupyter notebook
これだとpyarrowが使えなかった。。。
py3.5.3-conda4.2.0をdeactivateして、condaのrootにpyarrowをインストールして、jupyter notebookを再起動すると、使えるようになってた。
docker インストールとTensorflowコンテナの起動
Dockerのインストール・設定とTensorflowコンテナを起動した時の手順。
Dockerインストール手順はちょくちょく変わっているようなので、最新の情報は公式ドキュメントを参照すること。
公式ドキュメントでのUbuntuへのDockerインストール手順
Get Docker for Ubuntu - Docker Documentation
Dockerインストール
sudo apt-get update # … # Reading package lists... Done sudo apt-get -y install \ linux-image-extra-$(uname -r) \ linux-image-extra-virtual # … # Setting up linux-image-generic (4.4.0.66.70) ... # Setting up linux-image-extra-virtual (4.4.0.66.70) ... curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # [sudo] password for chie8842: # OK sudo apt-key fingerprint 0EBFCD88 # pub 4096R/0EBFCD88 2017-02-22 # Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 <- 公式ドキュメント(https://docs.docker.com/engine/installation/linux/ubuntu/#install-using-the-repository)に載っているフィンガープリントと一致しているか確認すること。 uid Docker Release (CE deb) <docker@docker.com> # sub 4096R/F273FCD8 2017-02-22 sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" sudo apt-get update # … # Reading package lists... Done sudo apt-get install docker-ce apt-cache madison docker-ce # docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages sudo docker run hello-world # Unable to find image 'hello-world:latest' locally # latest: Pulling from library/hello-world # 78445dd45222: Pull complete # BDigest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7 # Status: Downloaded newer image for hello-world:latest # Hello from Docker! # This message shows that your installation appears to be working correctly. # To generate this message, Docker took the following steps: # 1. The Docker client contacted the Docker daemon. # 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. # 3. The Docker daemon created a new container from that image which runs the # executable that produces the output you are currently reading. # 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. # To try something more ambitious, you can run an Ubuntu container with: # $ docker run -it ubuntu bash # Share images, automate workflows, and more with a free Docker ID: # https://cloud.docker.com/ # For more examples and ideas, visit: # https://docs.docker.com/engine/userguide/
インストール後の設定
現在のユーザでDockerを実行できるように権限付与する
sudo groupadd docker # groupadd: group 'docker' already exists sudo usermod -aG docker $USER docker run -it ubuntu bash # docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/create: dial unix /var/run/docker.sock: connect: permission denied. # 公式ドキュメントの通りだと、ここでdocker run に成功するはずだが、 # 上記のように失敗する。OS再起動したらうまくいくようになった。 sudo shutdown -r now docker run -it ubuntu bash # Hello from Docker! # This message shows that your installation appears to be working correctly. # To generate this message, Docker took the following steps: # 1. The Docker client contacted the Docker daemon. # 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. # 3. The Docker daemon created a new container from that image which runs the # executable that produces the output you are currently reading. # 4. The Docker daemon streamed that output to the Docker client, which sent it # to your terminal. # To try something more ambitious, you can run an Ubuntu container with: # $ docker run -it ubuntu bash # Share images, automate workflows, and more with a free Docker ID: # https://cloud.docker.com/ # For more examples and ideas, visit: # https://docs.docker.com/engine/userguide/
Dockerサービスの起動と自動起動の設定
sudo systemctl enable docker # [sudo] password for chie8842: # Synchronizing state of docker.service with SysV init with /lib/systemd/systemd-sysv-install... # Executing /lib/systemd/systemd-sysv-install enable docker sysv-rc-conf --list |grep docker # docker 0:off 1:off 2:on 3:on 4:on 5:on 6:off # 自動起動がONになっていない場合は、自動起動をONにする。 sudo sysv-rc-conf docker on
Tensorflowコンテナの起動
docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow # 初回はDockerイメージのダウンロードが行われるので時間がかかる # … # Copy/paste this URL into your browser when you connect for the first time, # to login with a token: # http://localhost:8888/?token=******* <-このURLでブラウザを開くと、Jupyter Notebookにアクセスできる。
開いたJupyter Notebookのキャプチャ
デフォルトでGetting StartedやMNistなどのサンプルのノートブックが入っている。
起動スクリプトrc.localがFailする場合の対処
/etc/rc.localスクリプトで共有ディレクトリのマウント処理を行うようにしていたのだけれど、 なぜかわからないけれど、dockerを入れた後に、再起動してもマウントされなくなっていた。
source /etc/rc.local
とすると、きちんとマウントされる。 rc.localのサービスステータスを確認すると、以下のようになっていた。
chie8842@chie-no-ubuntu:~$ sudo systemctl start rc-local ● rc-local.service - /etc/rc.local Compatibility Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) Drop-In: /lib/systemd/system/rc-local.service.d └─debian.conf Active: failed (Result: exit-code) since 月 2017-03-27 14:22:15 JST; 2min 1s ago Process: 897 ExecStart=/etc/rc.local start (code=exited, status=32) 3月 27 14:22:15 chie-no-ubuntu systemd[1]: Starting /etc/rc.local Compatibility... 3月 27 14:22:15 chie-no-ubuntu rc.local[897]: mount: mount //169.254.173.204/share on /home/chie8842/share f 3月 27 14:22:15 chie-no-ubuntu systemd[1]: rc-local.service: Control process exited, code=exited status=32 3月 27 14:22:15 chie-no-ubuntu systemd[1]: Failed to start /etc/rc.local Compatibility. 3月 27 14:22:15 chie-no-ubuntu systemd[1]: rc-local.service: Unit entered failed state. 3月 27 14:22:15 chie-no-ubuntu systemd[1]: rc-local.service: Failed with result 'exit-code'. ...skipping... ● rc-local.service - /etc/rc.local Compatibility Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) Drop-In: /lib/systemd/system/rc-local.service.d └─debian.conf Active: failed (Result: exit-code) since 月 2017-03-27 14:22:15 JST; 2min 1s ago Process: 897 ExecStart=/etc/rc.local start (code=exited, status=32) 3月 27 14:22:15 chie-no-ubuntu systemd[1]: Starting /etc/rc.local Compatibility... 3月 27 14:22:15 chie-no-ubuntu rc.local[897]: mount: mount //169.254.173.204/share on /home/chie8842/share f 3月 27 14:22:15 chie-no-ubuntu systemd[1]: rc-local.service: Control process exited, code=exited status=32 3月 27 14:22:15 chie-no-ubuntu systemd[1]: Failed to start /etc/rc.local Compatibility. 3月 27 14:22:15 chie-no-ubuntu systemd[1]: rc-local.service: Unit entered failed state. 3月 27 14:22:15 chie-no-ubuntu systemd[1]: rc-local.service: Failed with result 'exit-code'.
手動で起動しようとしても失敗する。
chie8842@chie-no-ubuntu:~$ sudo systemctl start rc-local Job for rc-local.service failed because the control process exited with erro r code. See "systemctl status rc-local.service" and "journalctl -xe" for det ails.
標準出力にあるコマンドを実行してみるが、原因はわからず。
chie8842@chie-no-ubuntu:~$ sudo systemctl start rc-local.service Job for rc-local.service failed because the control process exited with erro r code. See "systemctl status rc-local.service" and "journalctl -xe" for det ails. chie8842@chie-no-ubuntu:~$ journalctl -xe 3月 27 14:10:21 chie-no-ubuntu systemd[1]: Time has been changed -- Subject: Time change -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- The system clock has been changed to REALTIME microseconds after January 3月 27 14:10:21 chie-no-ubuntu systemd[1]: snapd.refresh.timer: Adding 1h 5 1 3月 27 14:10:21 chie-no-ubuntu systemd[1]: snapd.refresh.timer: Adding 5h 3 3 3月 27 14:10:21 chie-no-ubuntu systemd[1]: apt-daily.timer: Adding 6h 51min 3月 27 14:10:21 chie-no-ubuntu systemd[1080]: Time has been changed -- Subject: Time change -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- The system clock has been changed to REALTIME microseconds after January 3月 27 14:10:21 chie-no-ubuntu systemd[1695]: Time has been changed -- Subject: Time change -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- The system clock has been changed to REALTIME microseconds after January
最終的に、起動スクリプトの最初にsleepを入れるとうまくいった。
sleep 10 mount -t cifs … exit 0
機械学習で遊びたいときに使えるデータまとめ
GroupLens
Datasets | GroupLens
GroupLensは、推薦システム、オンラインコミュニティ、モバイルおよびユビキタステクノロジ、デジタルライブラリ、地理情報システムに特化したミネソタ大学のコンピュータサイエンスおよびエンジニアリング部門の研究室。
推薦システムの入力データとして利用できるデータセットが用意されている。
映画の視聴履歴データMovieLensが特に有名。
MovieLensは、csv形式で、データの欠落やばらつきがあるので、前処理も含めた処理を行う必要がある。
100k、10M、20Mなどいくつかのデータ量のデータセットがあり、それぞれデータ形式が微妙に違う。
Wikipedia
Wikipedia:データベースダウンロード - Wikipedia
Wikipediaのデータ。
形態素解析を行うような処理で利用される。
データはXML形式で記述されているので、XMLをparseする前処理が必要。
UCIマシンラーニングレポジトリ
UCI Machine Learning Repository: Data Sets
様々な機械学習の論文などで利用されている機械学習用データのリポジトリ。
たくさんのデータセットが登録されている。
各データセットの特徴はあまり見やすくない。
https://www.yelp.com/dataset_challengeYelp Captcha
Yelpが提供しているデータセット。
飲食店の情報やマスキングされた利用者のデータ。
AWSのパブリックデータセット
大規模なデータセットのリポジトリ | AWS のパブリックデータセット
AWSが提供しているデータセット。
Amazon Elastic Block Store (Amazon EBS) スナップショットと Amazon Simple Storage Service (Amazon S3) バケットのいずれかのフォーマットで提供される。
提供されるデータの例:
* AWS でのランドサット: ランドサット 8 号衛星により作成中の地球全土の衛星画像コレクション (解像度は中程度)
* 1000 ゲノムプロジェクト: 人の遺伝的多様性の詳細なマップ
* Google ブックスの N-gram: Google ブックスの N-gram コーパスを含むデータセット
Kaggle
Datasets | Kaggle
機械学習コンペティションKaggleのデータセット。
コンペ用のデータだが、データだけダウンロードしてコンペに応募しなくてもOK。
LIBSVM
LIBSVM Data: Classification, Regression, and Multi-label
LIBSVMは、機械学習に適した形式でデータを読み込むためのオープンソースのAPI及びデータ形式のこと。
このLIBSVMのドキュメントページに、libsvm形式のデータセットの入手先がまとまっている。
データのクラス数や特徴量の数、データ量なども確認できる。
楽天 Rakuten Institute of Technology | 楽天データ公開 楽天技術研究所が大学、公的研究機関の研究での利用のために公開しているデータ。
- 楽天市場 全商品データ (約1億5600万商品)、レビューデータ (約6400万レビュー)
- 楽天トラベル 施設データ (約13万施設)、レビューデータ (約620万レビュー)
- 楽天GORA 施設データ (1,669施設)、レビューデータ (約32万レビュー)
- 楽天レシピ レシピデータ (約80万レシピ)、レシピ画像 (約80万画像)、Pickupレシピ (1,854レシピ)、デイリシャスニュース (362件)
- 楽天Viki ビデオ属性情報 (623本)、ユーザー行動評価 (約488万件
利用できるビッグデータに関するスライドも見つけたので貼っておく。
2017/5/28追記
dataset CV Datasets on the web
GitHub - caesar0301/awesome-public-datasets: An awesome list of high-quality open datasets in public domains (on-going). By everyone, for everyone!学習済みモデル Model Zoo · BVLC/caffe Wiki · GitHub
GitHub - fchollet/deep-learning-models: Keras code and weights files for popular deep learning models.
MXNet Model Zoo — mxnet documentation
Ubuntu16.04でVNCサーバを起動する
# VNCサーバのインストール sudo apt-get install vnc4server # VNC接続時のパスワードの設定 vncpasswd # Password: # Verify: # VNCサーバの初回起動。これによって設定ファイルが作成される。 vncserver :1 # New 'chie-no-ubuntu:1 (chie8842)' desktop is chie-no-ubuntu:1 # Starting applications specified in /home/chie8842/.vnc/xstartup # Log file is /home/chie8842/.vnc/chie-no-ubuntu:1.log # 起動確認ができたらVNCサーバを停止する vncserver -kill :1
~/.vnc/xstartupの内容を以下のとおりにする。
#!/bin/sh # Uncomment the following two lines for normal desktop: # unset SESSION_MANAGER # exec /etc/X11/xinit/xinitrc [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic & x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & x-window-manager & gnome-panel & gnome-settings-daemon & metacity & nautilus &
VNCサーバを起動する
vncserver :1
再起動後もvncserverを起動しておきたい場合は、~/.bashrcもしくは/etc/rc.localのexit 0の前に以下を追記する。 ※/etc/rc.localに記述するときは、vncの設定をrootで行っておくこと。
vncserver :1
参照:
HeapStatsの使い方メモ
HeapStatsの使い方。ツールの使い方はすぐ忘れるのでメモ。
HeapStatsとは
HeapStats とは、JavaVM のヒープやGC状況を監視する軽量なツールで、エラーの兆候を検知してSNMPを通してリアルタイムなアラートを発します。生成するログはかなり小さいもので、GUIツールで解析することができます。 HeapStatsは、次の二つのプログラムで構成されます: エージェント(agent) - JavaVMの情報を収集するJVMTIエージェントプログラムです。 アナライザ(analyzer) - 上記の情報を解析する Javaアプリケーションプログラムです。
エージェントを使ってみる
環境はUbuntu16.04.2。
Javaインストール
sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java8-installer
java -version # java version "1.8.0_121" # Java(TM) SE Runtime Environment (build 1.8.0_121-b13) # Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
プロファイリングを行うサンプルアプリの作成
ArrayListに要素を追加していき、ゆっくりとヒープサイズが大きくなるようにする
// OOMESample.java import java.util.ArrayList; import java.util.List; public class OOMESample { public static void main(String[] args) { List<String> list = new ArrayList<>(); long i = 0; while (true) { if (i++ % 2000 == 0) list.add("aaa"); } } }
作成したアプリケーションをコンパイルする
javac OOMESample.java ls # OOMESample.class OOMESample.java
OOMESample.classができていること。
HeapStatsのインストール
git clone https://github.com/HeapStats/heapstats.git sudo apt-get install ant maven binutils-dev libsnmp-dev ./configure make su - make install ldconfig exit
HeapStatsをアタッチしてサンプルアプリを実行してみる
java -Xmx512m -agentlib:heapstats OOMESample # heapstats INFO: HeapStats 2.0.trunk # heapstats INFO: Supported processor features: AVX # heapstats INFO: Agent Attach Enable = true # heapstats INFO: SnapShot FileName = heapstats_snapshot.dat # heapstats INFO: Heap Log FileName = heapstats_log.csv # heapstats INFO: Archive FileName = heapstats_analyze.zip # heapstats INFO: Console Log FileName = None (output to console)
エージェントがアタッチされると、heapstatsの標準出力が現れる。
アプリケーションが終了すると、以下のようにログが出力されている。
ls # heapstats_analyze170309235501.zip # heapstats_log.csv # heapstats_snapshot.dat
エージェントの設定ファイルを操作する
今回は、ソースコードからビルドを行っているので、設定ファイル(heapstats.conf)のテンプレートは/usr/local/etc/にある。
設定を変更する場合は、これをコピーして使用する。
cp /usr/local/etc/heapstats.conf ./ # heapstats.confの設定を行う java -Xmx512m -agentlib:heapstats=/path/to/heapstats.conf OOMESample
実行中のアプリケーションにエージェントをアタッチする
wget http://icedtea.classpath.org/people/yasuenag/heapstats_tools/raw-file/tip/AgentAttacher/AgentAttacher.java javac -cp $JAVA_HOME/lib/tools.jar AgentAttacher.java
アプリケーション動作中に、以下を実行する
java -Xmx512m OOMESample # アプリケーションを起動する java -cp $JAVA_HOME/lib/tools.jar:. AgentAttacher /usr/local/lib/libheapstats.so /path/to/heapstats.conf # アプリケーション実行中に別のプロンプトで実行する。 # Num Process-Info # 0 AgentAttacher /usr/local/lib/libheapstats.so # 1 OOMESample # Input attach target process-number:1 <- エージェントをアタッチしたいプロセスの番号を入力する # Attacher is successed.
アナライザを使ってみる
Analyzerを起動する
GUI画面上のエクスプローラで、/path/to/heapstats/analyzer/fx/target/heapstats-analyzer-2.0.trunkを開き、heapstats-analyzer.jarをダブルクリックすると、アナライザが起動する。
Log Data
Resource Data
Log Detail Data
SnapShot Data
Summary Data
Histogram
SnapShot Data
Reference Tree
表示されなかった。理由は不明。
Thread Recorder
JVMLive
リアルタイムでプロファイリング結果が見える機能っぽい。JVisualVMで見えるみたいなもの? 今回試していないので、後で試したら追記する。
アナライザの詳しい説明は以下のページにある。
HeapStats/Analyzer-version2 - IcedTea
使ってみての所感
インストールや設定は簡単にできて、取得できる情報量も多い。
(エージェントが一括でログを取得してくれてらくちん)
アナライザのGUIについて、Resource Dataなどメモリや凡例がなく、パッと見方がわからないところがあり、改善の余地があるように感じた。
カーソルを当てたら説明がでてくるような機能などあれば便利だと思った。
なぜだかReference Treeの内容が見えなかった。(前に使ったときは見えた。)なぜだろう。
参考にしたページ
JavaVM監視・解析ツール HeapStatsを使ってみた | キャスレーコンサルティング 技術ブログ HeapStats/jp - IcedTea https://github.com/HeapStats/heapstats
GitHub PagesとHUGOでブログサイトを構築する
はじめに
ブログサイト構築について、 Wordpress→GitHub Pages+HUGO→medium→はてな ということで、現在はてなに落ち着いている。 せっかく試したので、GitHub Pages+Hugoでのブログサイト構築についてもメモしておく。
HUGO環境構築
まずgoをインストールする。
wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.8.linux-amd64.tar.gz
※ バージョンやOSは環境にあった最新版のものを確認してインストールすること。 goのダウンロード資材のURLはこちら
~/.profileに追記
export PATH=$PYENV_ROOT/bin:$PATH:/usr/local/go/bin export GOPATH=$HOME/go
追記したら環境変数の変更を現在のセッションに反映すること。
source ~/.profile
続いてHUGOのインストール
go get -v github.com/spf13/hugo hugo version # インストールしたら、バージョンの確認を行う。 # Hugo Static Site Generator v0.2-DEV linux/amd64 BuildDate: 2017-02-27T23:55:32+09:00
HUGOで新しいサイトを構築する。
cd /pass/to/ hugo new site myblog # myblogは新しく作成するサイトの名称
基本的な使い方をメモしておく。
- テーマの利用 HUGOのテーマのページから、気に入ったテーマをクローンして利用する。 私はHugo-Octopressを選んだ。テーマは自分でカスタマイズすることも可能。
cd /pass/to/myblog/ git clone https://github.com/parsiya/Hugo-Octopress.git themes/Hugo-Octopress
このサイトのテーマとかかわいくてシンプルでいいなぁ、と思うので、参考にしてカスタマイズしてみたい。
- 設定ファイル 基本的な設定ファイルは、config.tomlを利用する。Hugo-Octopressの中にsample-config.toml が含まれていたので、それをテンプレートとして利用した。
cp /pass/to/myblog/themes/Hugo-Octopress/sample-config.toml /pass/to/myblog/
- 新しいコンテンツの投稿 新しいコンテンツを投稿するには、以下のコマンドを実行する。
hugo new post/test.md # /pass/to/myblog/contents/post/test.mdが作成される。
/pass/to/myblog/contents/post/test.mdを開くと、以下のヘッダが記述されている。ページの内容はヘッダの下にマークダウン形式で記述する。
+++ title = "test" type = "post" date = "2017-03-23T16:01:06+09:00" +++
ブログの要素として、categoriesやtags、authorなども記述しておきたい場合は、/pass/to/myblog/archetypes配下に、 default.md、もしくはpost.mdを配置しておくと、その要素も含めたヘッダを作成してくれる。
cat default.md # +++ # categories = ["未分類"] # tags = [""] # description = "" # draft = true # author = "chie8842" # type = "post" # +++
default.mdに記述した場合はすべてのコンテンツ、post.mdに記述した場合はpost/*.mdに対してのみ反映される。 詳しくはArchetypesのページ参照。
$ ~/go/bin/
ローカルにWebサーバをたててサイトの内容を確認する
hugo server --theme=Hugo-Octopress-Orange --buildDrafts --baseURL=WebサーバのIPアドレス --bind=0.0.0.0 --disableLiveReload=false --watch
オプションについて一部説明する。
- –bind 今回Ubuntuでたてた仮想サーバ上でHUGOを動かしており、ホストのWindows上で画面を確認をしたかったが、デフォルトだとローカルからしかHUGOでたてたWebサーバへのアクセスができないため、–bindオプションで全てのNICのアドレスをバインドして、ホスト側から閲覧可能なようにした。
- –buildDrafts HUGOでは、下書きと公開用のコンテンツを、コンテンツのヘッダのdraft = true/falseで判別している。デフォルトでは、draft = falseのコンテンツのみ静的コンテンツのジェネレートを行うが、下書きの確認をしたい場合は、–buildDraftsオプションを利用する。
- –disableLiveReload, –watch disableLiveReloadはHUGOでサイトをrebuildしたときにブラウザをリロードするかどうかの設定。watchはファイルシステムを監視して変更があった場合はリクリエイトする設定。サイトの内容をリアルタイムに確認しながら編集したい場合に使用するとよい。
アップロード用のページをジェネレートする
hugo
上記のコマンド一発で、config.tomlのpublishDirで指定したディレクトリ配下に、サイトのHTML/CSS/JSなどのファイルが作成・格納される。
Wordpressからの移行
Wordpressに投稿したブログの移行もやってみた。
ブログを Wordpress から Hugo に移行したを参考にした。
Wordpressには、wordpress-to-hugo-exporterというHUGOへの移行のためのプラグインがあるので、それを利用する。 ちなみに、他のブログサイトとの間の移行ツールもいろいろあり、以下にまとまっている。 https://gohugo.io/tools/
GitHubでの管理と、GitHubページの設定
以下のような構成で管理するようにした。
├── myblog --> masterブランチ │ ├── archetypes │ ├── config.toml │ ├── content │ ├── docs(HUGOでジェネレートされたファイルのディレクトリ) --> gh-pagesブランチ→GitHub Pagesで公開 │ ├── layouts │ ├── static │ └── themes ── mytheme --> themeブランチ
尚、GitHub PagesはデフォルトだとJekyllを使ってビルドしようとする。今回はJekyllは利用しないので、docsディレクトリ配下には、.nojekyllという名前のファイルを作成しておく。
touch /path/to/myblog/docs/.nojekyll
使ってみての所感
使ってみて、いいな、と思ったところは以下のとおり。 * マークダウンで記事がかける。 * githubで記事を管理できる。 * サイトの管理にお金がかからない。 * カスタマイズできる。アフィリエイトなども自由にできる。
一方で、以下の点で使い勝手が悪かった。 * HUGOをインストールしたPCからでないと、記事がアップできない。 * HUGO自体に不具合があったときに、GO言語に詳しくないので直せなくて困る。 * テーマがあまり豊富でない。かわいい系のテーマがない。 気に入ったものを自分で作る必要があるがそこに時間をかけたくない場合は面倒。 * SEO対策を自分でがんばらないと、最初は全然見てもらえない。 * 全てマークダウンで記事を書くので、表現に制約がある。 * 画像を載せるときとか、小さく表示しておいてクリックしたらポップアップしたい、とかそういうかゆいところは自分で頑張って実装する必要がある。
最終的に、サイトは見やすくしたいけど自分でメンテするのに労力をかけたくなかったので、一旦はてなに移った。 また時間ができたらいじってみようと思う。
最後に、一応HUGOで作ったサイトのURLを載せておく。 https://chie8842.github.io/blog/
参照
Go言語のページ: https://golang.org/
HUGOのドキュメント:https://gohugo.io/
HUGOのテーマのページ: http://themes.gohugo.io/
GithugPagesのページ:https://pages.github.com/