Help us understand the problem. What is going on with this article?

今さらRailsに手を出すのもしゃくなのでHanamiの開発環境をDockerで作ったった

More than 1 year has passed since last update.

はじめに

  1. 新人が研修でRubyを勉強している
  2. でも俺はRubyをちゃんと触ったことがない
  3. なんか恥ずかしい
  4. せや、開発環境構築してなんかしたろ!!

というわけでDocker-composeを使って今話題らしいHanamiの環境を作ってみました。

完成品はこちら

Hanamiってなんぞ?

RubyのWebフレームワークです。公式サイトはこちら
公式サイトで謳っている文句を信じるなら

  • 速い
  • 軽い
  • 安全
  • 簡単

の4拍子が揃っているようです。多分Rails触ったことある人なら割とすんなり飲み込めそうです。
個人的にはRailsは使うコマンドがrailsだったりrakeだったりするのが辛かったのですが、こちらはbundle exec hanamiでだいたいなんとかなるみたいです。
あ、Railsの5.0以降だとrailsコマンドに統合されてるみたいですが、私は4系までしか触ったことがありません。

構成

hanami newで作成されるテンプレートにDockerfileとdocker-compose.ymlを足しています

Dockerfile
FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN echo 'gem: --no-document' > ~/.gemrc \
  && bundle install

ADD . /app

まあ、Rails使うときと同じです。

docker-compose.yml
version: "3" 
services:
  mysql:
    image: mysql
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ./containers/mysql:/var/lib/mysql
  adminer:
    image: adminer
    ports:
      - 8080:8080
    links:
      - mysql
  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    command: "bundle exec hanami server --host 0.0.0.0 -p 2300"
    volumes:
      - .:/app
      - ./containers/bundle_install:/app/vendor/bundle
      - ./containers/bundle:/app/.bundle
      - ./containers/node_modules:/app/node_modules
    ports:
      - 2300:2300
    links:
      - mysql

こちらの記事を参考にしていますが、DBのコンテナは一つにして、DBの中身を確認できるようにadminerも用意しています。

コンテナ解説

用意したコンテナは下記の通りです

  • mysql
  • adminer
  • app

本当はキャッシュとしてredisも入れたかったのですが、Hanamiのどこに仕込めば良いのかよくわからなかったので...
これから勉強してわかったら追記します。

mysql

MySQLのコンテナです。
それ以上説明することは特にありません。

adminer

adminerのコンテナです。
コンテナ起動後、localhost:8080にアクセスすれば見られます。
DBのホストはmysql、ユーザー名とパスワードはどちらもrootでログインできます。
DBホストがmysqlでログインできるのはdocker-composeがymlに記載されたコンテナ名で名前解決できるようにネットワークをよしなに設定してくれているからです。

なので、別にdocker-compose.yml以外のファイル内でもdocker-composeのネットワーク内であれば、mysqlとかadminerで名前解決できます。

app

Hanamiの本体です。
起動したらlocalhost:2300にアクセスしたら画面を見れます。

参考ページではdocker-compose.yml内で環境変数DATABASE_URLを定義していますが、これだと開発環境でもテスト環境でも同じDBを参照してしまいます。
(参考にした記事では開発用とテスト用でDBコンテナを分けてますが、投稿した@shibabuki_yuta さんも改善の余地はあると感じている模様)

色々試して見たところ、.env.developや.env.test内でもコンテナ名で名前解決できることがわかったので、それぞれにこんな設定を書きました。

env.develop
DATABASE_URL="mysql2://root:root@mysql:3306/development"
env.test
DATABASE_URL="mysql2://root:root@mysql:3306/development"

使い方

とりあえずREADME読んで見てください。
不足や誤りがありましたらご一報いただけると幸いです。

よーし、頑張ってRuby勉強するぞー。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした