SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
第5回 - あなたとMix -
GMO Pepabo, Inc.
Joe Honzawa
2015/06/11 Elixir勉強会
Elixirだ
前回やったこと
> モニタとリンク
> supervisor
今回の内容
> Mix
> ドキュメンテーション
> タスクを作ろう
> Dialyzerで型チェック
テストとか前にやったのはスキップ
ゴール
> ドキュメント書けるようになる
> タスク作れるようになる
> Dialyzerは「へー」って感じで
なぜ
> ライブラリ公開するなら
> みんなが使える形式で配布
> ドキュメントは必須
> 関数の使い方や仕様
> 使いやすくしなきゃね
マナーみたいなものですね
Mixおさらい
> Rubyにおけるbundlerとrake
> 依存性解決
> タスクランナー
> mix new my_app
> mix test
> mix something.i.defined
ドキュメンテーション
の前に
モジュール属性
@なんちゃら
defmodule M do
@the_value 3
def fun, do: @the_value
end
モジュール属性
> 他言語での定数みたいに使う
> Joe-noh/japanese_holiday
> コンパイル終了後、原則消える
> 実行時にはアクセスできない
> 当然、編集もできない
予約されてる属性
> @doc
> @moduledoc
> @shortdoc
> @type
> @spec
> @behaviour
> @external_resource  など
ドキュメンテーション
さあ!
$ cd fibonacci
lib/fibonacci.ex
defmodule Fibonacci do
@moduledoc """
フィボナッチなモジュールだよ
* みんなも
* 一緒に
* フィボナッチ!
"""
lib/fibonacci.ex
@doc """
次のフィボナッチ数を返す
iex> Fibonacci.next
0
iex> Fibonacci.next
1
"""
def next do
# 略
end
ほいさ
$ iex -S mix
iex(1)> h Fibonacci
iex(2)> h Fibonacci.next
ポイント
> @moduledocでモジュールの説明
> @docで関数の説明
> Markdown使える
mix.exs
defp deps do
latest = ">= 0.0.0"
[
{:ex_doc, latest, only: :docs},
{:earmark, latest, only: :docs}
]
end
$ mix docs するために必要
ほいさ
$ mix deps.get
$ mix deps.compile
$ MIX_ENV=docs mix docs
$ open doc/index.html
hexdocsに公開
$ mix hex.user register
$ mix hex.publish
$ mix hex.docs
> https://hex.pm/docs/publish
タスクを作ろう
タスク
$ mix phoenix.new
$ mix phoenix.gen.html
$ mix ecto.migrate
> よくやることをまとめておく
> プロジェクトの初期化や生成
> 運用に関わる作業
目標
$ mix help
:
mix escript.build # Builds …
mix fib # フィボナッチ!
mix help # Print …
:
fibタスクをつくる
どこに書く
$ mkdir -p lib/mix/tasks
$ touch lib/mix/tasks/fib.ex
慣習
> lib/mix/tasks以下に書く
> mix foo なら
> lib/mix/tasks/foo.ex
> mix foo.bar なら
> lib/mix/tasks/foo.bar.ex
これちょっと注意
fib.ex
defmodule Mix.Tasks.Fib do
use Mix.Task
def run([num]) do
Application.start(:fibonacci)
num = String.to_integer(num)
1..num
|> Enum.map(fn _ -> Fibonacci.next end)
|> Enum.each(&IO.puts/1)
end
end
ポイント
> use Mix.Task
> run/1を定義
> 引数はList
> 文字列で渡ってくる
> mix fib 3 なら引数は ["3"]
> OptionParser 便利
fibある?
$ mix help
fib.ex
defmodule Mix.Tasks.Fib do
use Mix.Task
@shortdoc "フィボナッチ!"
def run([num]) do
# 略
end
end
mix helpで表示するには@shortdocが必要!
fib見えた?
$ mix compile
$ mix help
Dialyzerで
型チェック
mix.exs
defp deps do
latest = ">= 0.0.0"
[
{:ex_doc, latest, only: :docs},
{:earmark, latest, only: :docs},
{:dialyze, latest, only: :dev}
]
end
よしなにやってくれる便利ライブラリ
lib/fibonacci.ex
defmodule Fibonacci do
# 中略
@spec next() :: integer | no_return
def next do
# 略
end
end
lib/fibonacci/server.ex
defmodule Fibonacci.Server do
@type server :: pid | atom
# 中略
@spec next(server) :: integer | no_return
def next(pid) do
# 略
end
end
発熱注意
$ mix deps.get
$ mix deps.compile
$ mix dialyze
なんぞ
> @specで関数の仕様を記述
> @typeで自分で型を定義
> 詳しくは公式を参照
> Kernel.Typespec
今回やったこと
> Mix
> ドキュメンテーション
> タスクを作ろう
> Dialyzerで型チェック

Contenu connexe

Plus de Joe_noh

パフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったことパフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったことJoe_noh
 
Vue.jsのユニットテスト
Vue.jsのユニットテストVue.jsのユニットテスト
Vue.jsのユニットテストJoe_noh
 
Vuexと入力フォーム
Vuexと入力フォームVuexと入力フォーム
Vuexと入力フォームJoe_noh
 
カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後Joe_noh
 
サイクルOJTイントロダクション
サイクルOJTイントロダクションサイクルOJTイントロダクション
サイクルOJTイントロダクションJoe_noh
 
お産ウィークイントロダクション
お産ウィークイントロダクションお産ウィークイントロダクション
お産ウィークイントロダクションJoe_noh
 
モバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクションモバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクションJoe_noh
 
Webオペレーション研修イントロダクション
Webオペレーション研修イントロダクションWebオペレーション研修イントロダクション
Webオペレーション研修イントロダクションJoe_noh
 
Web開発研修イントロダクション
Web開発研修イントロダクションWeb開発研修イントロダクション
Web開発研修イントロダクションJoe_noh
 
リーンキャンバス
リーンキャンバスリーンキャンバス
リーンキャンバスJoe_noh
 
もっとgit
もっとgitもっとgit
もっとgitJoe_noh
 
できないことはPortで外注
できないことはPortで外注できないことはPortで外注
できないことはPortで外注Joe_noh
 
DBにseedするライブラリつくった
DBにseedするライブラリつくったDBにseedするライブラリつくった
DBにseedするライブラリつくったJoe_noh
 
やってみた -URL外形監視-
やってみた -URL外形監視-やってみた -URL外形監視-
やってみた -URL外形監視-Joe_noh
 
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半Joe_noh
 
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Joe_noh
 
Declaimerっていうやつつくった(つくってる)
Declaimerっていうやつつくった(つくってる)Declaimerっていうやつつくった(つくってる)
Declaimerっていうやつつくった(つくってる)Joe_noh
 
いつかどこかで使えそうな英語
いつかどこかで使えそうな英語いつかどこかで使えそうな英語
いつかどこかで使えそうな英語Joe_noh
 
NUTハッカソン2014成果報告
NUTハッカソン2014成果報告NUTハッカソン2014成果報告
NUTハッカソン2014成果報告Joe_noh
 
@nukokusa_botを支える技術
@nukokusa_botを支える技術@nukokusa_botを支える技術
@nukokusa_botを支える技術Joe_noh
 

Plus de Joe_noh (20)

パフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったことパフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったこと
 
Vue.jsのユニットテスト
Vue.jsのユニットテストVue.jsのユニットテスト
Vue.jsのユニットテスト
 
Vuexと入力フォーム
Vuexと入力フォームVuexと入力フォーム
Vuexと入力フォーム
 
カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後
 
サイクルOJTイントロダクション
サイクルOJTイントロダクションサイクルOJTイントロダクション
サイクルOJTイントロダクション
 
お産ウィークイントロダクション
お産ウィークイントロダクションお産ウィークイントロダクション
お産ウィークイントロダクション
 
モバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクションモバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクション
 
Webオペレーション研修イントロダクション
Webオペレーション研修イントロダクションWebオペレーション研修イントロダクション
Webオペレーション研修イントロダクション
 
Web開発研修イントロダクション
Web開発研修イントロダクションWeb開発研修イントロダクション
Web開発研修イントロダクション
 
リーンキャンバス
リーンキャンバスリーンキャンバス
リーンキャンバス
 
もっとgit
もっとgitもっとgit
もっとgit
 
できないことはPortで外注
できないことはPortで外注できないことはPortで外注
できないことはPortで外注
 
DBにseedするライブラリつくった
DBにseedするライブラリつくったDBにseedするライブラリつくった
DBにseedするライブラリつくった
 
やってみた -URL外形監視-
やってみた -URL外形監視-やってみた -URL外形監視-
やってみた -URL外形監視-
 
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半
 
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -
 
Declaimerっていうやつつくった(つくってる)
Declaimerっていうやつつくった(つくってる)Declaimerっていうやつつくった(つくってる)
Declaimerっていうやつつくった(つくってる)
 
いつかどこかで使えそうな英語
いつかどこかで使えそうな英語いつかどこかで使えそうな英語
いつかどこかで使えそうな英語
 
NUTハッカソン2014成果報告
NUTハッカソン2014成果報告NUTハッカソン2014成果報告
NUTハッカソン2014成果報告
 
@nukokusa_botを支える技術
@nukokusa_botを支える技術@nukokusa_botを支える技術
@nukokusa_botを支える技術
 

Elixirだ 第5回