１週間でユーザー投稿型ニュースサイト「Meteor News」作ってみた


## はじめに

先日11/1に Meteor に特化したユーザー投稿型ニュースサイト[Meteor News](https://news.meteorjs.jp) をリリースしました。

この記事ではその時に使用した技術やサービスの紹介と、構築に関する所感を述べたいと思います。


## 使用した技術やサービス

### [Meteor](https://www.meteor.com/)

Meteor はサーバー＆クライアントのコードが JavaScript だけで記述できる JavaScript フレームワーク(プラットフォーム)です。
データベースの値を変更すると、そのデータが関連する部分が自動的に書きかわるリアクティブパラダイムを採用しているのも特徴で、簡潔にコードがかけるのが魅力的です。

Meteor 正式版の1.0がリリースされてから、先週(10/28)で１周年を迎えました :clap: 


### [Telescope](http://www.telescopeapp.org/)

Telescope は [Hacker News](https://news.ycombinator.com/) や [Product Hunt](https://www.producthunt.com/) のようなユーザー投稿型ニュースサイトを構築できる、Meteor で作られたオープンソースソフトウェアです。

Meteor News はこの Telescope をカスタマイズして利用しております。

### [GitHub](https://github.com/)

ソースコードの管理には GitHub を利用しています。
また Meteor News のソースコードを　GitHub で公開しておりますので、バグや要望がありましたら GitHub の Issues をご活用ください。

Meteor News リポジトリ: https://github.com/j-hack/news.meteorjs.jp

### [お名前.com](http://www.onamae.com/)

meteorjs.jp ドメイン取得とDNSレコード設定には[お名前.com](http://www.onamae.com/)を使用しました。
お名前.comのネームサーバーを利用している場合に使用できるDNSレコード設定が便利です。

### [さくらのVPS](http://vps.sakura.ad.jp/)

Meteor News 本番環境はさくらのVPS上に構築しています。
サーバーOSは Ubuntu 14.04 LTS です。

### [Ansible](http://www.ansible.com/)

構成管理ツールの Ansible で本番環境の設定をしています。
今回のサーバー構築で初めて触りましたが、サーバー側にエージェントを入れる必要がなく、YAMLで設定ファイルを記述できるのですんなりと利用できました。

### [VirtualBox](https://www.virtualbox.org/)

仮想環境を提供するオープンソースのソフトウェアです。
Ansible を直接本番環境に適用するのは気が引けたので、VirtualBox 上に Ubuntu を構築して、VirtualBox のスナップショット機能を使いながら Ansible の Playbook を作成しました。

また、Meteor News の本番環境デプロイ前の動作確認用にも使用しております。

### [mupx (Meteor Up X)]((https://github.com/arunoda/meteor-up/tree/mupx))

mupx は任意のサーバーに対して、Meteor セットアップからデプロイまで面倒を見てくれる便利なツールです。
mupx でデプロイすると、Meteor アプリは Docker 上で動きます。
なお、mupx 対応サーバーOSはいまのところ Ubuntu のみとなっております。

### [Codeship](https://codeship.com/projects)

継続的デリバリサービスの一つです。
5つまでのプライベートプロジェクト、月に100回までのプライベートビルドが無料で利用できます。
GitHub にソースコードを push すると、Codeship が変更を検知し、テスト実行と本番環境へのデプロイを行うようにしています。

### [Mailgun](http://www.mailgun.com/)

メール送信には Mailgun というサービスを利用しています。
月に10,000通までのメール配信が無料です。
Meteor で Mailgun を設定するのはとても簡単で、環境変数 MAIL_URL に SMTP サーバー設定を記述するだけで Mailgun が利用できるようになります。

### [SSLストア](http://www.ssl-store.jp/)

SSL サーバー証明書を取得するのに使用しました。
海外の SSL サーバー証明書取得サービスだと、jp ドメインが使用できないところもあるのですが、
こちらは日本のサービスなので jp ドメインに対応しています。

## 仕様設計〜開発〜リリースまでのスケジュール

日付      | 内容
---------|----------------------
10/27(火) | 仕様設計、Telescope 検証
10/28(水) | ドメイン取得、DNS設定作成、Ansible 検証
10/29(木) | 仮想環境、本番環境構築、Ansible Playbook 作成 
10/30(金) | ロゴ作成、Telescope カスタマイズ(日本語化、Github/Meteorアカウントログイン機能実装)
10/31(土) | 継続的デプロイの仕組みづくり、動作チェック、コンテンツ投稿
11/1(日) | Meteor News リリース！

## 所感

Telescope はサイト設定機能があるので、ほとんどの場合ソースコードをいじる必要はありませんでした。
Wordpress を触っているような感覚で HackerNews 風なサービスを作ることができます。

また、一定のルールにしたがってコードを書くことで、[カスタマイズできる仕組み](https://telescope.readme.io/docs/overview)が備わっているので、テンプレートをいじったり、新たなロジックを追加するのも簡単です。

mupx というデプロイツールを使うことで、デプロイも簡単に行えるため、自前でサーバーで運用することもできます。
予算あるなら Meteor 本家が運用している [Galaxy](https://www.meteor.com/galaxy) というサービスを使用するのもいいかもしれません。

それではよい Meteor ライフを！

# 参考

- [Telescope: Build your own Hacker News, Reddit, or Product Hunt.](http://www.telescopeapp.org/)
- [Meteor News: Meteoritesでゆる〜く作る、Meteorニュースサイト。](https://news.meteorjs.jp/)