読者です 読者をやめる 読者になる 読者になる

UUUM攻殻機動隊

UUUMのエンジニアによる技術ブログです

Datadog の導入がめっちゃ楽だった話

こんにちは、新人エンジニアのハトネコエです。
気付いたらプログラミングを始めて2年が経ちました。

みなさまはゴールデンウィークをいかがお過ごしでしたでしょうか?
私は人生初めてVPSを契約しました。

Ansible でサーバー構築のレシピを四苦八苦しながら作り、アプリケーションを動かせるまで至ると、
今度はサーバーの監視をしたくなってきます。

(↓なお、Ansibleについては以前、弊社のナカハシがこちらの記事で取り上げました)

サーバー監視のクラウドサービスと言えば Mackerel がおなじみです。
見やすいグラフが印象的で、弊社でも一部利用させていただいております。

Mackerel が便利なのは知っているので、
今回は異なるクラウドサービスを使おうと考えました。 Datadog です。

f:id:nekonenene:20170508180215p:plain

続きを読む

Railsアプリ開発中に思い出す、StrategyとRackミドルウェア

こんにちは、エンジニアのナカハシです。

最近は、しばらくRailsでのWebアプリ開発に勤しんでいる毎日です。

開発中にStrategyとRackミドルウェアを復習したので、軽くまとめてみました。

続きを読む

Rails5で手早くCMS開発をするのに便利なgem7選

エンジニアのタナカです。

4月から新しくサイト開発に携わる方も多いのではないでしょうか?
サイト開発では殆どの場合、CMS機能を用意する必要がありますが、このCMS機能をどう実現するのかというのが最初に検討することだと思います。

CMSといえばWordPressが有名ですが、WordPressも一長一短なので、 様々な理由によりCMSのスクラッチ開発を行う場合も多いと思います。
とはいえスクラッチ開発となると開発コスト等が問題になる場合もあります。 けれども、Railsを以ってすればWordPressと同等以上のCMSを効率よく開発する事も可能です。

ということで、Rails5でのCMS開発に役立つgemを紹介したいと思いますが、 その前にまずはCMSに必要な機能を定義してみます。
CMSと言っても様々なタイプがありますが、今回はニュース・メディア系のCMSを想定しています。

ニュース・メディア系CMSでよくある機能

  • ニュース(ブログ)記事投稿・編集
  • 固定ページ投稿・編集
  • Slug(カスタムURL)の設定
  • 画像投稿
  • タグ付け
  • 予約投稿
  • 履歴管理
  • ユーザー管理

これらの機能を意識しながら、使えそうなgemを紹介いきたいと思います。
これから紹介するgemはいずれも定番のものなので、ぜひ抑えておきたいところです。

ActsAsList

github.com

記事等の並び順を管理することができ、順番の入れ替えが簡単に行えるようになります。
元々Railsに組み込まれていた機能がgemとして切りだされたものですが、Rails5でももちろん使用可能です。

FriendlyId

github.com

たとえばIDが含まれるような以下のようなURLをフレンドリーなURLにしてくれるものです。

http://example.com/states/4323454

このような人間に理解しやすいURLに置き換えることができます。

http://example.com/states/washington

WordPressではslugという機能で提供されています。

Paperclip

github.com

フォームから画像ファイルをアップロードを行う際に便利なgemで、リサイズやサムネイル作成も行ってくれます。
アップロードされた画像をS3に書き出すことも可能なので、画像まわりの処理をこのgemに任せることができます。

ActsAsTaggableOn

github.com

記事などにタグ付けを行えるgemです。 タグの追加削除が簡単に行え、タグでの検索も可能です。

予約投稿

Rails5で利用できるgemは無さそうですが、記事のモデルにpublished_atカラムを追加し、公開日時をセットする方法がよくとられています。
同モデルに以下のようなscopeを定義することで公開済みのものを簡単に取得できるようになります。

scope :published, -> { where("published_at IS NOT NULL").where("published_at <= ?", Time.now) }
scope :draft, -> { where("published_at IS NULL OR published_at > ?", Time.now) }

PaperTrail

github.com

記事の履歴管理に利用できます。
記事を編集した際に、前の状態に戻すといった操作が行えるようになります。

devise

github.com

ユーザー登録やログイン認証といった機能を簡単に組み込むことができます。
アクセス権限を設定することが可能なので、adminユーザーの管理だけでなく、一般ユーザー向けにSNS的な機能を提供したい場合にも利用できます。

Storytime

github.com

これまでに上げたgemの機能を全て実現できるCMS機能が丸ごと入りのgemです。
これらの機能に加え、マルチサイトやナビゲーションの管理など、WordPressとほぼ同等の機能があり、管理画面も付いてきます。

CMSのgemはほかにもいくかリリースされていますが、Rails5対応で多機能なものはStorytime以外に無いと思います。
(固定ページの投稿、編集だけが必要であれば、ComfortableMexicanSofaもお勧めです。)

ただし残念なことに、最近はメンテナンスがあまりされていません。そのため、不具合があった場合は自分で対応することになる可能性が高いです。 (私は自分でメンテすることを前提に利用していますが、Storytimeのソースが読みやすいので問題が発生してもパッチの作成等で対応しています。)

まとめ

gemをうまく組み合わせることでCMSを効率よく開発することができます。(CMSに限った話ではないですが)
また、条件があえば、CMS全部入りのgemを利用することで、開発工数を大幅に削減することも可能です。
WordPressを独自プラグイン等で無理に拡張する前に、Railsでの開発を検討してみてはいかがでしょうか?

PHPなチームがRuby on Railsでの開発を行って得られたもの

3日連続 nazoです。

昨年から行っているチャレンジとして、Ruby on RailsによるWebサービスの開発があり、それが一段落しましたので、経緯と結果について報告させて頂きたいと思います。

続きを読む

CircleCIでRailsのDockerコンテナをECSにデプロイする

nazoです。

Graceful RestartによるRailsアプリのデプロイ を行っていたのですが、もっと手軽に環境ごとデプロイをしたいという需要もあって、Dockerを採用したデプロイも行っています。

CircleCI(1.0)では辛うじてDockerのサポートがありますが、いくつか癖があるので、ECSと含めて運用まで踏まえた手順について紹介したいと思います。

続きを読む

Docker?Vagrant?個人PCのWebアプリケーション開発環境においての環境分離方法

nazoです。

個人PC上では、複数の開発環境が同居することは珍しくありません。その際に、複数のバージョンの同一のソフトウェアが混在することもあります。 それらを切り替える度にアンインストール・インストールを繰り返すのは非効率なので、同居させつつ自動的に切り替わるような状況が最適かと思われます。

これを実現するには様々な方法がありますが、一長一短あるため、具体的にどう違うのか見ていきたいと思います。特にmacOSを中心とした話になります。

続きを読む

Google Spreadsheet のデータを自動で Google Calendar に追加する

おはこんばんちは!! 尾藤 a.k.a. BTO です!!

スギ花粉の脅威に毎日怯えている皆様、ご機嫌いかがでしょうか。 最近は Google Spreadsheet や GAS(Google Apps Script) を使って社内業務の改善などをしております。 だって会社がどんどん大きくなってるから、業務の効率化を進めないと回らないんだもん!!

Google Spreadsheet のデータを Google Calendar に追加したい!!

弊社では営業管理ツールに Salesforce 使っていて、他部署とのデータ連携のために、Salesforce のデータを Google Spreadsheet に同期しています。 ここに動画の公開日の情報があるので、Google Calendar にイベントを追加したいのが今回の目的です。 以前は、全て人が手作業で入力していたため非常にコストのかかる作業だったのが、全て自動でできるようになってので、かなり効率化することができました。

続きを読む