LoginSignup
23
23

More than 5 years have passed since last update.

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

Posted at

はじめに

  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勉強するぞー。

参考

23
23
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
23