サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
TGS2024
shindolog.hatenablog.com
知っていることはブログに書いておかないと不安になる病気にかかってしまいましたので、Chef についてのメモを残しておきます。 はじめに アプリケーションサーバに MySQL とか Nginx とか様々なパッケージをインストールしているかと思います。皆さんはこれらのパッケージをどうやってインストールしていますか。 「パーケッジ管理ツールを使って手動でインストールしているよ!」 お疲れ様です>< 「必要なパッケージをまとめてインストールするシェルスクリプトを作ったよ!」 シェルスクリプトを書くのは楽しいですね! 「構成管理ツールを使っているよ!」 わぉ!ツールの思想や使い方を私に教えてください! 「アプリケーションサーバを構築したことがないよ!」 一緒に勉強しましょう。 ……まあ、そんな感じで様々な方がいらっしゃると思うのですが、一番最初にあげた「手動でインストールしていく方法」には以下のよう
Rails の Controller には、アクションメソッドに前処理を挟み込むための before_action というメソッドが存在します。ActiveRecord などを継承していない普通の Ruby のクラスでも簡単に前処理を挟み込めるようにしたいと思う場面がありまして、便利なモジュールがないか調べたところ、ActiveSupport::Callbacks というモジュールを見つけました。このエントリでは、このモジュールの使い方を簡単に紹介していきます。 ActiveSupport::Callbacks ActiveSupport::Callbacks ActiveSupport::Callbacks は「あるコードが実行されることをきっかけにして、別の処理を呼び出す」という処理が簡単に定義できるようになるモジュールです。エントリの冒頭で話したように「あるメソッドに前処理を挟み込む
前回の記事に続き、MySQLに関するネタを書きます。今回の内容のほとんどは『実践ハイパフォーマンスMySQL』の読みながらまとめた内容になりますので、より詳しく知りたい方はそちらをご一読ください。 実践ハイパフォーマンスMySQL 第3版 作者: Baron Schwartz,Peter Zaitsev,Vadim Tkachenko,菊池研自(監訳),株式会社クイープ出版社/メーカー: オライリージャパン発売日: 2013/11/25メディア: 大型本この商品を含むブログ (6件) を見る 確認したMySQLのバージョン: 5.6.22 インデックスの基礎知識 インデックスについて一言で説明するのは難しいので、まずはMySQLが目的のデータをどのようにして見つけるのかを説明します。MySQLに次のSQLクエリを発行したとします。 SELECT * FROM users WHERE nam
今回はMySQLのストレージエンジンという重箱の隅をつつくようなネタをメモしておきます。 私はMySQLについてはよちよちレベルなので、込み入った内容には触れられません。初心者でも理解しやすい部分での違いを中心にまとめていこうと思います。 【復習】ストレージエンジンとは MySQLなどのデータベース管理システムが、データベースにデータを書き込んだり、読み込んだりするときに使われる基盤を「ストレージエンジン」と呼びます。初心者同士の会話の中で「MySQLを使ってデータを保存する」と表現することがありますが、実際にデータの保存処理を行っているのが、このストレージエンジンになります。MySQLの論理構造を図で載せます。 MySQLは「データベース管理システム」ですので、データベースを管理するために必要である様々な機能が搭載されています。その中の「データの読み書き」という部分を担当しているのがスト
2015-03-15 RailsのアクセスログのフォーマットをカスタマイズできるGemを作りました Rails Gem jpmobileを使っているRailsアプリで、あるUserAgentを持つクライアントからのアクセスのみエラーが出る症状が発生しました。Errbitなどのエラー監視サービスを利用すれば、どのUserAgentを持つクライアントのときにエラーが発生するかすぐにわかるのですが、ローカル環境でも使うことができて、もう少しお手軽にUserAgentを確認したいと思いまして、RailsのアクセスログにUserAgentを残すことができるようになるGemを作りました。UserAgentだけを残すことができれば十分だったのですが、せっかくなのでApacheのLogFormatのように細かくカスタマイズできるような作りにしてみました。Custom Rails Logger odail
2015-02-11 Rails のフラグメントキャッシュで使われるキーについて Rails FragmentCache 試したバージョン: Rails 2.1.5 Railsにはテンプレートの一部をキャッシュ化するフラグメントキャッシュという機能があります。使い方は『Ruby on Rails Guides』の「Caching with Rails: An overview — Ruby on Rails Guides」という記事と、『ASCIIcasts』の「ASCIIcasts - “Episode 387 - Cache Digests”」という記事で詳しく説明されています。(『Ruby on Rails Guides』には英語の記事しかありませんが、『ASCIIcasts』には日本語の記事があります。)キャッシュ名を指定する方法が色々とありますが、キャッシュ名の指定の仕方によっ
HerokuアプリにNaked domain(www無しのドメイン)を割り当てる方法は色々あります。あるアプリで「PointDNS」というHerokuのアドオンを利用してNaked domainを割り当ててみました。とても簡単に割り当てることができましたので、設定方法のメモと、名前解決にまつわるよちよち向けな話をブログに残しておきます。 PointDNS | Add-ons | Heroku PointDNSの特徴 簡単にですが、PointDNSの特徴を書きます。 Herokuのアドオンとして提供 1アプリ毎で1ドメインにつき10レコードまで無料で登録できる Herokuアプリで必要となるレコードをまとめて登録できる機能がある 管理画面からドメインのリクエスト数を確認することができる 1アプリ毎に無料で使えるところがとても魅了的です。1ドメインにつき10レコードまで登録できますが、NSレコ
2014年12月25日にRuby2.2.0がリリースされました。Rubyがアップデートされるたびに、新機能の紹介エントリを書いていたのですが、今回はitselfメソッドの追加が気になりましたので、このメソッドだけに絞ってエントリを書きます。 Kernel#itself itselfメソッドはレシーバ自身を返すだけのメソッドです。Ruby2.2.0未満のバージョンでも、以下のように実装することで、itselfメソッドを使うことができます。 class Object def itself self end end 実は、ActiveSupport4.2.0にもこっそりと追加されていますので、Rails4.2.0以降を使っていれば、Ruby2.2.0未満でもitselfメソッドを使うことができます。 ところで、このメソッドはどのような場面で使うのでしょうか。RailsAPIドキュメントを参考にし
セッション管理はWebアプリケーションを開発・運用するときに必ず関わってきますので、ある程度知っておかなければいけないことかと思うのですが、Railsのセッション管理について解説している資料が少ないように思えました。私もRailsのセッション管理についてあまり知識がありませんでしたので、簡単にですがまとめてみました。 なお、今回のエントリはセッション管理の大雑把な仕組みについて知っていることを前提にして進めていきます。セッション管理の仕組みについてご存知ない方は、『体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践』という書籍での説明がわかりやすかったので、そちらをご一読されると良いかと思います。 Railsのセッション管理方法 Railsでは、config/initializer/session_store.rbファイルにセッションの管理方法を指定します
Rails で複数のモデルに共通するメソッドをモジュールにまとめたいときに活躍するActiveSupport::Concern というライブラリがあります。 ActiveSupport::Concern https://github.com/rails/rails/blob/master/activesupport/lib/active_support/concern.rb この ActiveSupport::Concern がどうような実装になっているのか気になりましたので、少し調べたことを書き残しておきます。調べたことを1つの記事で書こうと思ったのですが、文章が長くなりそうでしたので、2つの記事に分けて書くことにします。 ソースコードリーディング前の復習 ActiveSupport::Concern は Ruby の include メソッドと extend メソッドを仕様をうまく利用
先日、Rails で開発しているときに意図しない InvalidAuthenticityToken エラーが発生して、すごくハマってしまいました。そのときに Rails のCSRF対策の仕組みについて調べてみましたので、ブログに残しておきます。 Rails のCSRF対策 Rails が生成した ApplicationController には以下の記述があります。 class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception end protect_from_forg
この記事は『パーフェクト Rails を読みました』シリーズの3回目の記事です。 1回目の記事は『パーフェクト Rails を読みました(1章) - Programming log - Shindo200』です。 2回目の記事は『パーフェクト Rails を読みました(2章) - Programming log - Shindo200』です。 今日も『パーフェクト Ruby on Rails』を読んでいきます。 パーフェクト Ruby on Rails 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏出版社/メーカー: 技術評論社発売日: 2014/06/06メディア: 大型本この商品を含むブログを見る 3章の感想 3章では Sprockets、CoffeeScript、Sass、Turbolinks について学んでいきます。まずは Sprokets から始まるのですが、Rack
2014-05-27 URI はクライアントにとって不透明であるべき??? HTTP URI よちよち.rb で『Web を支える技術』の読書会をしています。先日、P.63「5.6 URIの不透明性」の部分を読み合わせてのですが、ここに書いてあることが私には腑に落ちませんでした。この章での主張を引用します。 URI の内部構造を想像して操作したり、クライアント側でURIを構築したりしてはいけません。なぜなら、サーバ側の実装でURIの構造を変更したとたんにシステムが動かなくなってしまう、いわゆる密結合状態になるからです このように、URIをクライアント側で組み立てたり、拡張子からリソースの内容を推測したりできないことを、「URIはクライアントにとって不透明(Opaque)である」と言います。 「クライアントにとって不透明ではない URI を使うと密結合状態になってしまうのではないか」という
フィヨルドインターンで Lingr というチャットツールを使っているのですが、 「Github の Issue や Pull request にコメントが付いたとき、Lingr に通知する仕組みが欲しい!」と思いました。Idobata でしたら Github API から直接に通知を受け取る機能があるのですが、残念ながら Lingr にはそのような機能がありません。Github API から Hubot を経由して Lingr に通知できるようにしようと思い、そのようなことができる Hubot プラグインを探しましたが、見つかりませんでしたので、自分で Hubot プラグインを作成して、Github から Lingr に通知するようにしてみました。 Hubot プラグインの紹介 今回、作成した Hubot プラグインはこちらになります。 HubotGithubCommentsNotifie
2014年4月19日に大江戸 Ruby 会議04 が開催されました。大江戸 Ruby 会議は「日常発表会」というテーマで、普段から Asakusa.rb に参加している方々が思い思いに発表されました。 大江戸 Ruby 会議 04 http://regional.rubykaigi.org/oedo04/ レポート 2つだけピックアップして、レポートを書きます。 1年かけてgemを1つ作りました - Kunihiko Ito 「自己紹介のときに、自分の代表作として紹介できる gem が欲しかった」 git log の結果をブラウザに表示するライブラリ rgitlog を作ったことについて、@kunitoo さんが発表されました。@kunitoo さんは何も知らない状態から rgitlog を作るのに1年の期間がかかったそうですが、そんなに難しいことをしているライブラリでもないので、慣れれば
2013-11-29 JavaScript の関数の中で window と undefined を定義する理由を調べてみた JavaScript jQuery などの JavaScript のライブラリのソースコードを読んでいると、このようなコーディングパターンをよく見かけます。 (function(window, undefined){ // ... })(this); これはすぐに実行される関数の中にライブラリの実装コードを閉じ込めて、関数の中で定義した変数がどこからでも参照できる変数(グローバル変数)になる問題を回避しています。これは「グローバル汚染の回避」と呼ばれています。下記のコードを見てください。 (function(window, undefined){ var foo = "foo"; console.log(foo) //=> foo })(this); console.
私は ruby のバージョン管理に rbenv を利用しています。rbenv は ruby-build というプラグインを使って ruby のインストールを行います。このプラグインに現在インストール可能な ruby のバージョンとソースの取得先が記述されているようで、rbenv で最新の ruby をインストールするときは、先に最新の ruby-build をインストールしておかないといけません。 手元に ruby2.0.0-p353 をインストールしていないマシンがありましたので、インストールしようと思い、最新の ruby-build のインストールしました。 $ brew install --HEAD ruby-build $ brew link ruby-build Error: ruby-build has multiple installed versionsすると、「複数のバー
2012-04-12 Ruby初心者のための private と protected メソッドについて Ruby ※2013/04/08 記事のスタイルを修正実行環境:Ruby1.9.3privateとprotectedメソッドの違いについて、メタプログラミングRubyを読みつつ、復習のために書き残しておきます。Rubyリファレンスマニュアルでは下記のように定義されています。 private に設定されたメソッドは関数形式でしか呼び出せません。 protected に設定されたメソッドは、そのメソッドを持つオブジェクトのメソッド定義式内でなければ呼び出せません。 ※ Ruby1.9.3 リファレンスマニュアル - クラス/メソッドの定義 - 呼び出し制限 から引用 どういうことなのか、まずはprivateに設定されたメソッドを使ったプログラムを実行してみます。 class C1 def
rails new コマンドで生成したばかりの Gemfile には、uglifier という gem が書かれています。よちよち.rb の第4回で「この gem は何をしているのか?」と少し話題になりましたので、調べたことをまとめてみます。 uglifier: https://github.com/lautis/uglifier/ uglifier について uglifier リポジトリの README.md 冒頭から引用します。 Ruby wrapper for UglifyJS JavaScript compressor. どうやら UglifyJS2 という JavaScript のコード軽量化ライブラリを、Ruby で簡単に使えるようにした gem のようです。手始めに以下の JavaScript のコードを軽量化してみます。 // source.js var counterMo
この記事はパーフェクトRubyAdventCalendar2013の14日目の記事です。昨日の記事は、パーフェクトRuby Advent Calendar 2013(13日目) 気になるあの子でした。 感想 『パーフェクト Ruby』の制作に関わった方々、お疲れ様でした。Rake や Pry は適当に使っていたところがあったのですが、『パーフェクト Ruby』で便利な使い方を知ることができましたので、とても役に立ちました。 パーフェクトRuby (PERFECT SERIES 6) 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一出版社/メーカー: 技術評論社発売日: 2013/08/10メディア: 大型本この商品を含むブログ (10件) を見るまずは、書籍の感想について書きます。パーフェクトシリーズは『パーフェクト JavaScript
2013年2月24日に ruby 2.0.0-p0 がリリースされました。早速、rbenv で ruby 2.0.0-p0 をインストールしてみます。インストールのコマンドに付けないといけないオプションは環境によって変わってくるようで、私の環境では下記のコマンドでインストールできました。 ※ 環境 (Mac OSX Lion) homebrew で ruby-build と openssl と readline をインストール済み. $ CC=/usr/bin/gcc-4.2 RUBY_CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" rbenv install 2.0.0-p0ruby 2.0.0 に切り替えます。 $ rbenv
友人などにお願いしてペアプロ+TDD(テスト駆動開発)をしているのですが、テストの書き方やリファクタリングの進め方に不安がありました。TDDの思想も含めて一からしっかり学ぶために、巷で評判のTDDBCに参加しようと思ったのですが、都内で開催されるTDDBCは定員オーバーで参加が難しいです。TDDBCは全国で開催されていますので、思い切って都内のTDDBCのことは考えずに、新潟で開催されたTDDBC長岡1.0に参加してきました。 講義 午前は『プログラマが知るべき97のこと』や『SQLアンチパターン』の翻訳をされた和田卓人さんによる講義です。和田さんはソフトウェア開発に必要なものとして下記の3つを挙げられました。 バージョン管理ツール テスティングフレームワーク 自動化 和田さんは3つをまとめて「ソフトウェア開発の三本柱」と呼ぶようにしています。TDDではソフトウェア開発の三本柱を使いこなす
2012-11-03 rroongaで複数キーワードのAND検索,OR検索 Ruby rroonga は Ruby らしい書き方で groonga を使うことができるライブラリです。 rroonga http://ranguba.org/rroonga/ja/ 最近利用しているのですが、使い方をまとめたドキュメントがまだまだ少ない感じがあります。僕が利用して最初に嵌ったことは、複数キーワードのAND条件での検索、OR条件での検索の書き方です。方法はいくつかあるのですが、良さそうだと思った書き方を記録しておきます。 ・AND条件での検索 そもそも検索には select(options) {|record| ... } select(query, options) select(expression, options) の3つの書き方があります。今回は select(options) {|re
2013-04-15 Vagrant のコマンドをメモしておく Vagrant Vagrant は VirtualBox や VMware Fusion を使って仮想サーバーを作成し、コマンドラインから仮想サーバーを簡単に操作できるようにしたツールです。Vagrant http://www.vagrantup.com/最近は、サーバーの設定や更新を自動化するときに役立つ Chef というツールと組み合わせて、何度も壊しても問題がない開発環境を作るのに Vagrant を使うことが多いみたいです。本家のドキュメントがしっかりしているので、使い方について触れる必要がない気もするのですが、備忘録として書いておきます。 インストール Vagrant は Ruby で作られており、Rubygems.org で公開されていますので、gemコマンドで簡単にインストールできます。Vagrant を使うに
『アジャイルサムライ』を読んでスクラムの概要について学んだり、ハッカソンに参加してスクラムのような形で開発したことはありますが、「スクラムの思想についてちゃんと知っているか」と聞かれたら「はい」と答えられる自信はありません。スクラムの思想について学べる良いイベントがないか探しているときに『LEGO®ではじめるスクラム入門』というイベントがあることを知りました。Doorkeeperに過去のイベントの参加者の名前と一言が掲載されているのですが、過去の参加者にRuby界隈で活躍されている方が多くて気になりましたので、参加してきました。 イベントについて このイベントでやることは以下になります。 スクラムの思想について講義 レゴを使ったワークショップ Doorkeeperからイベント概要を引用させていただきます。 なんとなく流行っているから……という理由でアジャイルを採用してもうまくいきません。開
2013年3月16日に開催された『大江戸Ruby会議03』に参加してきました。会場は江戸川区の深川江戸資料館小劇場でしたので、電車で行きやすかったです。 最近は一方的なインプットが多くて、会場に着くまでは「またインプットが増えてしまう…」とちょっと憂鬱だったのですが、会場でいろんな方のお話を聴いていると「楽しさ」を感じて、憂鬱な気分を抜け出す元気をいただきました。まあ、ただの杞憂だったのかと思います。 気になった発表 A Rubyist life in London - @makoto_inoueさん ロンドンでRubyを使った仕事をされている@makoto_inoueさんによる、ロンドンのRubyistの生活を語る発表です。 Rubyは他の技術ネタとは違い、日本から情報が発信されることが多いので、海外のRubyist達は日本語の情報をGoogle翻訳を使って英訳して、情報を得ているそうで
東京Ruby会議10で「ライブラリのソースコード読むと勉強になる」とのお話がありました。読んでみたいけど、初めて読むのに良いライブラリは何なのかわかりません。1000行くらいのライブラリなら読めそうだと思ったので、コードの行数でライブラリを調べてみたところ、Sinatra の base.rb が約1700行だと知りました。初めてでも読めそうな量なので、今回は Sinatra(1.3.4) の base.rb を読んでみることにしました。 コードリーディング環境 tmux でコンソール画面を分割し、片方の画面でソースコードを開き、もう片方の画面で pry を起動しました。こうしておくと、ソースコードを読んでいて気になった構文があれば、pry ですぐに確認できて便利です。また、git でコードリーディング用のブランチを作っておいて、気になったことはコードに直接コメントを書き入れていきました。
REST って思想がいろいろとあって、議論が止まなくて、怖いものというイメージを持っている人がいると思います。僕がそうでした。RESTについて勉強していた頃に、自分用のメモとして書いたレポートを掲載します。この記事で怖いというイメージを少しでも消すことができれば幸いです。 【スタートアップ! REST】 まずは Wikipedia を眺めてみてください。わからなくても眺めるだけで良いです。 http://ja.wikipedia.org/wiki/REST RESTの入門記事を書かれている、こんなサイトもあります。 http://yohei-y.blogspot.jp/2005/04/rest_23.html 手元に「Web+DB Press vol.32」や「Web を支える技術」がある方は眺めてみてください。どの資料を見ても、最初のほうに必ず出てくるキーワードがあることに気づきました。
git リポジトリの中身にちょっと興味を持ったので、調べたメモを残しておく。 git においてのオブジェクト コミット情報やファイルの情報は、オブジェクトと呼ばれるファイルに格納される。オブジェクト名は、オブジェクトの中に格納されているデータのハッシュ値となっている。オブジェクト名の先頭2文字でオブジェクトファイルの格納先ディレクトリが分けられて、オブジェクト名から先頭2文字を除いた残りの文字がオブジェクトファイル名となっている。オブジェクトの格納場所は .git/objects ディレクトリ。各ブランチのコミット情報のオブジェクト名は .git/refs/heads/[ブランチ] に記録されている。 実際にリポジトリを作って、ファイルをコミットして、コミット情報のオブジェクト名を見てみる。 $ git init $ echo test > test_file $ git add test
このページを最初にブックマークしてみませんか?
『shindolog.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く