ElixirでMongoDBに接続するだけの簡単なお仕事です！！

#タイトル： ElixirでMongoDBに接続するだけの簡単なお仕事です！！

##目的： ElixirからMongoDBのドライバを使ってみる。

##目次：

1.概要
2."mix new"でプロジェクト作成
3.Elixirのライブラリを取り込んでみよう！！
4.MongoDBに接続するだけの簡単なお仕事！！

##実行環境：
OS： Windows8.1
Erlang： Eshell V6.4
Elixir： v1.0.4
elixir-mongo： v0.5.1
MongoDB：v3.0.3

###1.概要

####1.1 概要
Phoenixのサイトでずっと英語を素人翻訳するのがあきてきたので、
次の活力を得るためにElixir+MongoDBをやってみようかと思います。

今回の記事がQiitaにおける初投稿になります。
皆様の記事は色々と参考とさせて頂いています。いつも、ありがとうございます！
私も何かご協力ができないかと思い、記事を投稿することとしました。

Elixir+MongoDBとニッチな内容だと思いますが、
この記事がどなたかの訳に立つことを願います。

"mix new"やライブラリの取り込み方は、この方の記事を参考に実施しました。
[Qiita - Elixirで試しに何か書いてみる(その1)](http://qiita.com/HirofumiTamori/items/602d9b326cb4816c2fe6)

しかし、CRUD操作まで辿り着けなかった・・・orz

####1.2 前提
MongoDBのインストールやElixirの実行環境はあらかじめ構築しておいて下さい。
また、MongoDBは起動しておいて下さい。

###2."mix new"でプロジェクト作成

####2.1 プロジェクト作成
コマンドプロンプトを開く。

作業ディレクトリを作成します。
各自の適切なディレクトリに移動しておいて下さい。

以下のコマンド実行する。
`>mix new mongo_test`

作業ディレクトリ名はお好きなものをどうぞ！！

ディレクトリが作成されているか確認する。
lsでもいいしGUIで見てもいいです。

これで、mix newを使ってプロジェクトができました。

####2.2 テスト
作成したディレクトリへ移動し、以下のコマンドを実行する
`>mix test`

何もエラーが出なければおｋ。

###3.Elixirのライブラリを取り込んでみよう！！

####3.1 mix.exs編集
作業ディレクトリに移動する。

その中から、"/mongo_test/mix.exs"を開く。
色々書かれていると思うが、とりあえず目的だけ達する。

何がしたいか・・・
MongoDBのElixirドライバのライブラリが欲しい！！

下の方に"defp deps do"と言う部分がある。
ここに、以下の行を追加する。
追加： [{:mongo, "~> 0.5.1"}]

こんな感じになります。

```ex:mix.exs

defmodule MongoTest.Mixfile do
  use Mix.Project

  def project do
    [app: :mongo_test,
     version: "0.0.1",
     elixir: "~> 1.0.4",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps]
  end

  # Configuration for the OTP application
  #
  # Type `mix help compile.app` for more information
  def application do
    [applications: [:logger]]
  end

  # Dependencies can be Hex packages:
  #
  #   {:mydep, "~> 0.3.0"}
  #
  # Or git/path repositories:
  #
  #   {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"}
  #
  # Type `mix help deps` for more examples and options
  defp deps do
    [{:mongo, "~> 0.5.1"}]
  end
end
```


####3.2 ライブラリ取り込み
以下のコマンドを実行する。
`>mix deps.get`

これで、3.2で設定したライブラリがダウンロードできる。
依存関係とかも考慮しないといけないらしいが、
今回使うライブラリは一つだけなので気にしない。

hexの利用を聞かれると思うがyesで・・・
local.hexと各プロジェクトで混在できるらしい。

参考までにコマンドの実行結果

```
mongo_test\>mix deps.get
Could not find hex, which is needed to build dependency :mongo
Shall I install hex? [Yn] y
* creating c:/Users/Takes_000/.mix/archives/hex.ez
Running dependency resolution
Dependency resolution completed successfully
  mongo: v0.5.1
  bson: v0.4.3
* Getting mongo (Hex package)
Checking package (https://s3.amazonaws.com/s3.hex.pm/tarballs/mongo-0.5.1.tar)
Fetched package
Unpacked package tarball (c:/Users/Takes_000/.hex/packages/mongo-0.5.1.tar)
* Getting bson (Hex package)
Checking package (https://s3.amazonaws.com/s3.hex.pm/tarballs/bson-0.4.3.tar)
Fetched package
Unpacked package tarball (c:/Users/Takes_000/.hex/packages/bson-0.4.3.tar)
```

###4.MongoDBに接続するだけの簡単なお仕事！！

####4.1 Elixirソースコード作成
Elixirのソースコードは以下の通り作成した。

```ex:mongo_test.ex

mongo = Mongo.connect!
db = mongo |> Mongo.db("phoenix_bbs")
collection = db |> Mongo.Db.collection("comments")
Mongo.Server.close(mongo)
```

すみません、これだけなんです・・・
Rubyらしくもなく、関数型言語っぽさは皆無です・・・

####4.2 実行
mixで実行するため以下のコマンドを使う。
`>mix run ./lib/mongo_test.ex`

####4.3 MongoDB確認
MongoDBに接続し、DBとCollectionが作成されたか確認してみる。
(接続時、DB、Collectionがない場合は作成されて接続される)

以下、一連のMongoDB操作の流れ

```
mongo_test>mongo
MongoDB shell version: 3.0.3
connecting to: test
\> db
test
\> show databases
local        0.078GB
phoenix_bbs  0.078GB
\> use phoenix_bbs
switched to db phoenix_bbs
\> show collections
comments
system.indexes
\>exit
```

問題なく作成されている。
CRUD操作はまた分かったら続きの記事を作成します。

QiitaのMarckdown覚えないと・・・

追記
CRUD操作する続き書きました。
[続！ElixirでMongoDBに接続するだけの簡単なお仕事です！！](http://qiita.com/darui_kara/items/0f8eca49ed6032dda14b)

以上！！

以下、参考にさせて頂いたサイト様
https://github.com/checkiz/elixir-mongo