CrystalのパッケージマネージャShardsの使い方とWebフレームワークのKemalを試してみるテスト
この記事はCrystal Advent Calendar 2016 の23日目の記事です。
CrystalのコードはRubyに似ているので、階乗とかフィボナッチ数
のプログラムを書いたりしたことはあったけど、パッケージマネージャ
のShardsを使ったアプリ開発はやったことなかったな。
と思って、その使い方の練習とフルスタックじゃないWebフレームワーク
を試してみたいなということで、Crystalの軽量フレームワークといえば
Kemalじゃね?ってことで、Hello World!を出力する簡単なコードを
書いて実行してみることにする。
※自分の環境
systemにanyenv + crenvで0.20.0をインストール。
[手順]
1. プロジェクトを作成しルートディレクトリへ移動。
% crystal init app example
create example/.gitignore
create example/LICENSE
create example/README.md
create example/.travis.yml
create example/shard.yml
create example/src/example.cr
create example/src/example/version.cr
create example/spec/spec_helper.cr
create example/spec/example_spec.cr
Initialized empty Git repository in /home/haiju/workspace/example/.git/% cd example
2. ルートディレクトリ直下のshard.ymlを修正してKemalを
設定。
% vim shard.yml
■kemalをインストールできるように修正。
name: example
version: 0.1.0
authors:
- haiju <mail-address>
targets:
example:
main: src/example.cr
dependencies: --- 追加
kemal: --- 追加
github: kemalcr/kemal --- 追加
branch: master --- 追加
crystal: 0.20.0 --- defaultは0.19.4だったがsystemの最新を指定してみる
license: MIT
3. Shardsを使って依存パッケージや依存ライブラリをインストール。
% shards install
Updating https://github.com/kemalcr/kemal.git
Updating https://github.com/luislavena/radix.git
Updating https://github.com/jeromegn/kilt.git
Updating https://github.com/RX14/multipart.cr.git
Installing kemal (master)
Installing radix (0.3.5)
Installing kilt (0.3.3)
Installing multipart (0.1.1)
4. 実際にコードを書いてみる。
というより、むしろ、Kemalのサイトにあるサンプルコードを
写経してみる。
% vim src/example.cr
require "kemal"
get "/" do
"Hello, World!"
end
Kemal run
5. 4のコードをビルド。
% crystal build --release src/example.cr
何かエラーが発生している?Kemalがうまく読み込めてないらしい。
Error in src/example.cr:3: while requiring "kemal": can't find file 'kemal' relative to '/home/haiju/workspace/example/src'
require "kemal"
6. crystal env を確認してみる。
% crystal env
CRYSTAL_CACHE_DIR="/home/haiju/.cache/crystal"
CRYSTAL_PATH="/home/haiju/.anyenv/envs/crenv/versions/0.20.0/src:libs"
CRYSTAL_VERSION="0.20.0"
これから先の調べ方がよくわからないので作業中断。
もう少し調べて補足するつもりだけど、他の気になる少し古めのフレームワーク
も全部、相対パスだと読み込めなくて同じエラーだった。
ということは根本的に調べ方がまずいのかもしれない。
もう少し公式ドキュメント周りから攻めて行ってみよう。
という訳で初心者がゴソゴソしてみた現場からは以上になります。
[参考サイト]
isucon5q-crystal を公開するまでのメモ · GitHub