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

Yamakichi’s blog

yamakichiの技術ブログ

Rails Routing Constraints

Constraintsとは Railsのroutingに存在する機能 routingに制限を設けることができる デフォルトで定義されている カスタムで制約を作成することも可能 セグメントの制限 get "books/:id" => "photos#show", constraints: { id: /[A-Z]\d{5} } 上記はconstrai…

社会人1年目

無事3月に大学を卒業し、今日から社会人になりました。 都内のWeb系の企業でRailsアプリの企画と開発をやっていきます。 まだまだひよっこエンジニアなので日々精進していきたいです。 今年の目標は、去年よりもブログ記事を多く書くことなので、日々の開発…

Rails includes joins eager_load preload merge

INNER JOIN (内部結合) 結合する両方のテーブルどちらにも同じキーが存在するレコードのみを残し、それ以外は切り捨て。 OUTER JOIN (外部結合) 結合する両方のテーブルどちらにしか存在しないキーがあっても切り捨てずに取得する。 どちらのテーブルのレコ…

Rails ActionCacheを導入する

Webアプリケーションのパフォーマンス改善として、RailsのActionCacheを導入しました。 Railsのキャッシュに関する概要はRailsGuidesが一番わかりやすかったです。 Rails のキャッシュ: 概要 「キャッシュ(caching)」とは、リクエスト・レスポンスのサイク…

Rails CarrierWave アップロード画像を良い感じに圧縮するGem作った

Rails CarrierWave アップロード画像を良い感じに圧縮するGem作った Railsで画像アップロードを行うGemにCarrierWaveがあります。 そのCarrierWaveのextension的位置付けの圧縮機能を簡単に実装するGemを作りました。 carrierwave-optimize_image Ruby Gems …

オブジェクト指向のこころ 読んだ まとめ

オブジェクト指向のこころを読み終えました オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)作者: アラン・シャロウェイ,ジェームズ・R・トロット,村上雅章出版社/メーカー: 丸善出版発売日: 2014/03/11メディア: 単行本(ソフトカバー)この商品を含…

Reactでテストを行う まとめ その2

実際にテストを書いていきたい 前記事で紹介したツール。 React enzyme Mocha sinon power-assert chai jsdom アサーションライブラリは好みで選ぶ。今回はpower-assertを使ってみる。 前提 今回はReactのコンポーネントに対してのテストを行います。 かつ、…

Reactでテストを行う まとめ その1

Reactでテストを行う まとめ Reactのテスト環境を構築する際に色々と調べた結果。 もうツールとか色々ありすぎてわけがわからん。 となったので。 もし自分と同じ境遇にいる人がいたら少しでも手助けになれば良いなと思い、自分が調べたことをまとめておく。…

Rails Validationについて

データ管理はしっかりやりたい DBにデータが保存される時に、そのデータが正しいかどうかを検証する仕組みをバリデーションという。 バリデーションのトリガー バリデーションが走るメソッド群 create create! save save! update update! 上記のメソッドはオ…

Rails, Carrierwave, MiniMagick, Piet, 画像アップロード, 画像圧縮

Railsで画像をアップロードし、かつ画像圧縮も行いたい時の実装をメモで残す。 環境 Macbook OSX 10.11.6 Rails 5.0.0 Ruby 2.3 Carrierwave Piet MiniMagick Gem 実装に必要なGemをインストール gem "carrierwave" gem "piet" gem "mini_magick" bundle ins…

リファクタリング:Rubyエディション 読んだ

「リファクタリング:Rubyエディション」 読みました。 リファクタリング:Rubyエディション作者: Jay Fields,Shane Harvie,Martin Fowler,Kent Beck,長尾高弘出版社/メーカー: アスキー・メディアワークス発売日: 2010/02/27メディア: 大型本購入: 9人 クリッ…

あけましておめでとうございます 2017

2017年もよろしくお願いします。 4月からはついに社会人としてスタートします! イケてるRubyエンジニアになれるように頑張ります!

Rails ActiveRecordで値が変更する前後の値を取得する

ActiveRecordで値が変更する前後の値を取得することがあったのでメモ Rails 2.1あたりからActiveRecordの変更前後の値を取得する機能が備わっている。 method 意味 changed? 変更されているかどうか changed 変更されているattribute名の配列 changeds 変更…

Singletonパターン Ruby

シングルトンパターンとは 作成したクラスのインスタンスが唯一であることが保証される 唯一であるがゆえに、生成した1つだけのインスタンスにアクセスすることができる。 実装 Rubyにはsingletonと呼ばれるモジュールが定義されているためこれをrequireし、…

acts_as_listとjQueryで並べ替えを実装する

jQueryのsortableを用いて並べ替えを実装する Rails acts_as_list モデルの並び順を簡単に操作できるようにするGem 昔のRails1系あたりでは標準で搭載されていたらしいが、 途中でGemとして切り離されて現在は独立したGemとして存在する。 Rails 1.x の時代…

Compositeパターン Ruby

Compositeパターン コンポジットパターンとは あるものが同じような下位のもので作られているという考え方 大きなオブジェクトが小さな子オブジェクトから構成されていて、その子オブジェクトもさらに小さな孫オブジェクトでできていたりする 階層構造やツリ…

開発での小ネタ その2

開発での小ネタ その2 普段の開発で得た知見を書き留めておく YouTubeへのリンクでクエリを付加するロジック DBにURLが保存してありすでに存在すればそのまま。タグが付いていなければ付加する こちらを参考にしました。 def youtube_url uri = URI.parse("h…

Observerパターン Ruby

Observerパターン オブザーバーパターンとは Observerとは「観測者」 あるオブジェクトの状態が変化した際に、そのオブジェクト自信が「観測者」に「通知」をする仕組み。 オブザーバーは3つのオブジェクトで構成される。 サブジェクト(subject):変化する側…

Strategyパターン Ruby

Strategyパターン ストラテジーパターンとは 抽象的な処理と具象的な処理を分離することで、 変化に強い構造を実現する。 委譲を用いてアルゴリズムを変更可能にする。 目的の部分としてはテンプレートメソッドパターンと似ているが、 問題に対する解決のア…

TemplateMethod パターン Ruby

TemplateMethodパターン テンプレートメソッドパターンとは 抽象的な処理と具体的な処理を分離することで、 変化に強い構造を実現する。 2つのオブジェクトによって構成される。 骨格としての「抽象的なベースクラス」 実際の処理を行う「サブクラス」 用い…

Rubyを用いてデザインパターンを学ぶ

オブジェクト指向には設計原則とデザインパターンが存在する。 デザインパターンとは Gang Of Four(GoF)が定義したもの Javaで書かれた本がある。 「オブジェクト指向における再利用のためのデザインパターン」 1999/10 出版 プログラミングにおいて繰り返し…

オブジェクト指向設計 実践ガイド 読んだ

「オブジェクト指向設計 実践ガイド 」を一通り読み終えました。 オブジェクト指向設計実践ガイド ?Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方作者: Sandi Metz出版社/メーカー: 技術評論社発売日: 2016/09/02メディア: Kindle版この商品を…

MySQL5.7 JSON型の使い方メモ

MySQL5.7から実装されたJSON型 使い方メモJSON型のテーブルを作成する CREATE TABLE `blocks` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(120) NOT NULL, `content` varchar(200) NOT NULL, `meta` json DEFAULT NULL, PRIMARY…

ReactのVirtualDOM componentDidMount

React.jsを使っていてVirtualDOMに対してライブラリを適用させたい場面がありましたVirtualDOMなのでライブラリを適用させるタイミングに肝心のDOMがまだレンダリングされていないという状況に遭遇。 Reactの動きは崩さず、VirtualDOM群がレンダリングを終え…

Rubyの配列展開 *[a, b, c]

Rubyの配列展開 array = ["a", "b", "c"] *array # => a # => b # => c arrayのオブジェクトが入った変数の先頭に*(アスタリスク)をつけることでarray[0] array[1] array[2] の出力をしてくれる。 Rubyの中でも地味な機能ではあるけれども便利。筆者はこの機…

Railsの画像遅延ロードにはlayzr.jsがいいぞ

Webサービスのパフォーマンスを向上させるために表示する画像の遅延ロードを実現したい! そんなときにオススメなlayzr.jsを紹介します。筆者は実際にプロダクトに実装しました。 画像の遅延ロードをすることで得することは? 読み込み速度が速くなったり通…

git cherry-pick is 良い

学びをメモ:Gitを使っていて特定のブランチの特定のコミットのみを新しく作ったブランチに反映させたいなという場面がありました。 git rebaseもあるけどそれだと全てが過去のコミットとして反映されるから嫌だな〜、何か良い方法はないかな〜、と探していた…

Rails select2でajax処理を行い1万件以上でもスムーズに動くようにする。

jQueryのライブラリでいい感じに選択機能を実装するselect2があります。 今回はselect2でajax処理を行う方法を紹介します。 本家サイト Select2 - The jQuery replacement for select boxes本家サイトのExamplesにもあるようにselect2にajax処理でデータを取…

Rails kaminariにモンキーパッチをあててmetaタグをいい感じにする。

Railsでページネーションを実装するライブラリ、kaminariに対してモンキーパッチを当てました。 人生初のモンキーパッチでもあったのでやったことをまとめておこうと思います。 なにをやるのか? 環境は、Ruby 2.3.0 Rails 5.0.0 kaminari 0.17.0今回モンキ…

DBひでんのしょ

データベース(以下:DB)に関する自分の知見を整理しておきます。 DB秘伝の書という記事タイトルですが、公開した時点でもはや秘伝でもなんでもないですね。 ここにはDB設計に関するごく普通の考え方をまとめて書いています。 前述 なぜDBが必要なのか? DBを…

Rails5 に Draper 導入した際にエラーが出た

Rails5を使ってて出たエラーをメモRails5が正式にリリースされてもうすぐ2ヶ月ほど経とうとしています。Ruby on Rails最近新しく作り始めたアプリケーションにRails5を採用して開発を始めました。 そこで開発を効率よく進めていくために色々とGemを導入して…

Rails 複数のカラムに 一意制約 (ユニーク)を設ける

Rails ActiveRecordで複数のカラムに対して一意制約を設ける。複合一意制約複数のカラムの組み合わせがユニークであってほしい場面に遭遇しました。例えば、Siteテーブル Keywordテーブルが存在する時、Keywordテーブルにある site_id と name そして date …

Rubyのあれこれ、

あれこれ 普段Rubyを触っていてこれは学びとして記録しておきたいなと思ったものを紹介していきます。 OpenStruct Rubyには手軽に構造体を作成することができるOpenStructクラスが用意されています。 require 'ostruct' ab = OpenStruct.new ab.foo = 25 p a…

メタプログラミング まとめ

メタプログラミングRuby 第2版 を読んで学んだことをまとめておく。 メタプログラミングの中身 メタプログラミングとはコードを記述するコードを記述することである。Rubyはほぼ全てがオブジェクトでできている、純正オブジェクト指向の言語。 オープンクラ…

メタプログラミングRuby 第2版 読んだ。

読み終えました。メタプログラミングRuby 第2版メタプログラミングRuby 第2版 : Paolo Perrotta, 角 征典 : 本 : Amazon.co.jp この記事を書く前に内容を理解するために3週ぐらい読み直してるので、最初に読み終えたのは半月ほど前になります。最近、雨が降…

Emacs Magit使い方

Emacs の拡張パッケージ Magitを紹介します。 Magitってなに? MagitとはテキストエディタEmacsの機能を拡張するパッケージの一つです。 Emacs上でGitの操作を行うことができるようになります。github.comこんな感じにEmacs上でGitログを追えたりもします。 …

RubyのブロックとProcと、ときどきlambda

Rubyはほぼ全てがオブジェクトである。 ブロック ブロックとは、 {}もしくはdo...endで定義するもののこと。 ブロックを定義できるのはメソッドを呼び出すときだけ。 メソッドに渡されたブロックはyieldで呼び出される。 def method(a, b) a + yield(a, b) e…

Swift CocoaPod setup 導入手順

CocoaPods とは? CocoaPodsはObjective-C そして Swift のライブラリ管理ビルドツールです。 RubyでいうRubyGemsと同じ位置付けになります。CocoaPods 公式 CocoaPods.org CocoaPodsを導入する CocoaPodsはRubyGemを使用するためRubyが入った環境を必要です…

Rails 自分なりのapp以下のディレクトリ構成

RubyのアプリケーションフレームワークRailsは便利なもので、コマンド1つでアプリケーション開発を行うために必要な環境を一瞬で構築してくれます。さらにRailsは開発を快適にかつ、素早く行っていけるように設計されており、近年のWebスタートアップ系の企…

基本情報技術者試験に合格しました。

4月の第3週目に行われた基本情報技術者試験に合格しました(できました)。パチパチ合否の発表だけ先日発表されて受験番号を確認しました、なおまだ合格証書は手元に届いてません。6月上旬あたりにはくるのかな?基本情報を取ろうと思った理由は、特別に就活で…

はてな伊藤直也氏MIJS講演「プログラマでいること」を読んで

小野和俊さんのブログがとても面白く読み漁ってます。記事タイトルの、はてな伊藤直也氏MIJS講演「プログラマでいること」で語られている伊藤直也さん自身のお話がぐっとくるものがあったので紹介web界隈でお仕事している人なら知る人ぞ知る達人プログラマー…

【メモ】盗む側にもキャリアが必要なんだよって話

今どきの若手育成にひそむ3つの思いこみ というタイトルのスライドが"なるほど"といった感じだったのでメモがてら投稿。 今どきの若手育成にひそむ3つの思いこみ from Mariko Hayashi www.slideshare.net若手の育成者向けに作られたスライドですが、育成され…

LINE botでレストラン検索してみた

LINE botが先日公開されました。公式プレスリリースはこちら。 linecorp.comLINE CONFERENCE TOKYO 2016で LINE bot オープンAPIを公開する告知があり、 2016.04.07日からトライアルとして1万人限定でAPIの提供が開始されました。それに伴ってweb界隈では続…

プログラミング作法を読んで

プログラミング作法 を所々かいつまんで読んだ。技術本の中でも、名著の中の名著と言っても過言でもないこの本。C言語とUNIXの開発者のブライアン・カーニハンとロブ・パイクがスタンダードなプログラミング、そしてその本質的について書いた本です。 初版は…

slackからピザの注文に挑戦してみた

slackからピザの注文に挑戦してみた。\ピザ駆動開発/参考記事 qiita.com家入和真さんがQiitaに投稿しているのを見つけて面白そうだと思ってやってみました。 しかもちょうど小腹が空いた時にせっかくだしデリバリーでピザでも食べようかな、と思ったので。…

pixiv 2016 SPRING BOOT CAMPに参加してきたぞい

この春最後のインターン参加エントリーになります。 先週3/14(月) ~ 3/18(金) で行われたpixiv 2016 SPRING BOOT CAMPに参加しました。この記事を読む人はたぶんpixivインターンに興味を持っている人だと思うので、 今後pixivインターンに参加を検討している…

Rails URLにランダムな文字列を使いたい時に良い感じにやってくれるやつ

RailsでURLにランダムな文字列を使いたい時、他の人はどんな感じで実装しているんだろうかとおもってググってみると良い感じのgemを作っちゃってる人がいたので使わせてもらいました。詳細はこれ。 qiita.com記事が書かれたのが1年前と古いのでちゃんと動く…

Wantedly Spring Intern 2016に参加してきた

インターン参加エントリー タイトル通り、3月2日から3日まで、Wantedly Spring Intern 2016に参加してきました。 たった3日間という短い時間でしたがたくさんのことを学べて気付けて充実した時間を過ごしました。忘れないようにやったことなどを書き留めてい…

PR TIMESインターンに参加してきた。

これはインターン参加エントリーです。2/22(月)から2/24(水)までの3日間 PR TIMES ウィンターインターン2016 内定直結ハッカソン 3days に参加してきました。詳細はこちら。↓ prtimes.co.jp3日間、PR TIMES, Inc.さんにお世話になり、開発を行ってきました。…

ソードアート・オンラインのエントリーしたっ

エントリーしました、選考倍率やばそうだけど。笑www.vrmmo-project.jpもともとOnlineMMO RPGは小学生の頃からやっていたので大好きです。睡眠時間削りながらもレベル上げに励んでいたりしました。 もちろんアニメのソードアートオンラインも2012年放送時に…