地方でリモートワーク

リモートワーク、プログラミング、エンジニア、地方

ONCEシリーズWritebookをローカルで動かす方法

Writebookとは?

Writebookはオンラインで本を執筆、公開できるツールです。

以下に公開されているので、実際に見ていただくのが最もわかりやすいです。

books.37signals.com

公式サイト

once.com

無料で利用することができ、zipファイルとしてもダウンロード可能です。

以下のリンク先のサイトから「Get it for free」ボタンを押して チェックアウトフローを完了すると、 zipファイルのダウンロードリンクが掲載されているメールが届きます。

今回はこのzipファイルを解凍してローカルで動かしてみました。

動作させるための制約

今回は正しさよりも、 writebookのソースコードを修正しない ことを最優先にしています。

zipファイルの解凍

専用のディレクトリを作成して、ディレクトリを移動します。

$ mkdir writebook
$ cd writebook

専用のディレクトリでzipファイルを解凍します。 ファイルのパスは適宜書き換えてください。

$ unzip '/mnt/c/Users/ihato/Downloads/writebook.zip' 

Dockerfileの作成

writebookに本番環境用のDockerfileが付属しているのですが、 ローカルで使うには使いづらいので専用のファイルを作成します。

$ touch Dockerfile.development

Dockerfile.developmentには次のように記述します。 Gemを動かすために必要なパッケージをインストールするだけの最低限のDockerfileです。

またredisをインストールして、railsのサーバーと同一コンテナで動作させます。

それ以外にローカルで動かすために必要なコードは後述するDocker Composeに記述していきます。

FROM ruby:3.3.5

RUN apt-get update -qq && \
  apt-get install --no-install-recommends -y \
  build-essential \
  git \
  libyaml-dev \
  pkg-config \
  curl \
  libjemalloc2 \
  libvips \
  sqlite3 \
  vim \
  redis \
  && apt-get upgrade -y \
  && rm -rf /var/lib/apt/lists /var/cache/apt/archives

Docker Compose

次にDocker Composeの設定ファイルを作成します。

$ touch compose.yml

compose.ymlには次のように記述します。 ポイントはcommandのbin/bootコマンドで起動することです。 bin/bootコマンドを使うとProcfileをもとに次のプロセスが起動します。

  • Railsサーバー
  • Redis
  • Resque-pool(バックグランドジョブ)

またBINDINGとPORTを指定して、 ホストのブラウザから http://localhost:3000 でアクセスできるようにすることです。

services:
  web:
    image: writebook:latest
    build:
      context: .
      dockerfile: Dockerfile.development
    working_dir: /app
    volumes:
      - .:/app:cached
      - bundle:/usr/local/bundle:cached
    command: bash -c "rm -f tmp/pids/server.pid && bin/boot"
    stdin_open: true
    tty: true
    ports:
      - 3000:3000
    environment:
      - BINDING=0.0.0.0
      - PORT=3000
volumes:
  bundle:

これでローカルで動作させるための準備が整いました。

setup

セットアップを次のコマンドで実行します。 Gemfileのインストールやデータベースのセットアップが行われます。

$ docker compose run --rm web bin/setup

起動

セットアップが完了したら起動します。

$ docker compose up

ブラウザで http://localhost:3000 にアクセスしてみましょう。

セットアップ画面がみれましたね。

あとは自由にコードを見てみましょう。