特定のページを読み込んだときにアラートをだすchrome拡張を作った?

本番環境で間違えて開発環境でやるような操作をしてしまいそうになった/してしまったことはないでしょうか。ブラウザから何かの登録とか削除とか…

普段から注意することはもちろんですが、技術的に解決できるのではと思い特定のページにいったときにアラートを出すchrome拡張を作りました。と言えるのか分からんくらい簡単にできました。というかチュートリアルとかで全く同じことやってそうだ。。。github.com


対象のURLはmanifest.jsonで、対象のメッセージはscript.jsを変更すればOKです。

設定ができたら、chromeからmanifest.jsonを読み込みましょう。

デベロッパーモードにチェックをいれて・・・
f:id:suzan2go:20150517205629p:plain
パッケージ化されていない拡張機能を読み込む、を選択し、manifest.jsonが格納されたディレクトリを指定します。
f:id:suzan2go:20150517205906p:plain
するとmanifest.jsonで指定したページを読み込むと、アラートが表示されます。
f:id:suzan2go:20150517210836p:plain

manifest.jsonやscript.jsを更新した場合は、拡張機能のリロードが必要です。

気合いれて作ろうと思ったら、最初に調べたことで全部出来てしまった…
今回はmanifest.jsonやscript.jsを直接弄ってますが、chrome側でURLやアラートメッセージを設定できそうなので気が向いたら作ってみます。

chrome拡張何となく難しいイメージあったけど、結構お手軽に色々出来そうなので何か作ってみようかなーと思ったのでした。

IKEAで買った家具を2年で処分してしまった

転職前の有給休暇を利用して大体2年前に買ったIKEAの家具(ベッド、ワードローブ)を処分しました。
売ることも考えたけど、分解しなきゃいけないとか、そもそも値段つかないとかだったので、業者に頼んで持って行ってもらいました。

捨てたもの

買ったときのものが見つけられなかったので似たようなものを。値段はこれよりも安かったと思います。www.ikea.com
www.ikea.com

何で捨てたのか

色々ありますが、一番の理由は奥さんとの2人暮らし賃貸には少々サイズがデカ過ぎたことですかね。今後家族が増えた時のスペースが確保できないということで、今回処分しました。

2年で処分は本当にもったいないことしたなと思ってる。2年前住んでた家はクローゼットなかったので仕方なかった面もあるけど、当時新婚ということもあり少々舞い上がってたなーと反省してます。

IKEAの家具で後悔したこと。

家具自体は結構気に入っていたんですけどね。

お店でみるよりでかい

上にも書きましたがIKEAの家具はお店で見るとなんかちょうどいいサイズに思えますけど、実際に家で組み立てるとマジででかい。お店で見た時の1.5倍くらいに感じます。特にワードローブは背が高いので、部屋におくとかなり圧迫感ありました(処分したあと、この部屋こんなに広かったっけ??となった)。幅とか奥行きは当然買うときに気にしてましたが、高さはあんまり考えてなかったなーと反省。

重い

日本の同じサイズの家具の2倍は言い過ぎかもしれないですけど、本当に重いです。IKEAは基本自分で組み立てですが、運送業者さんが持ってきた板を設置する部屋に持っていくのだけでも本当に大変だったのを覚えてます。組み立て手順自体は簡単なものですけど、マジで重いので一人暮らしの女性とか非力な男性で大型の家具かっちゃうとホント大変ですよ!

引っ越しのとき大変

IKEAの家具は引越し業者に嫌な顔されますねw重すぎるのでそのまま持っていくことができず、分解して再組み立てすることになるので。引越し業者によって対応分かれますが、以下のパターンでした。

  1. IKEAの家具は拒否される。別途指定の家具業者に頼んで、分解・組み立てが必要(+5万とかだった)。
  2. 引っ越し中に破損しても責任はとれないことに同意できれば、分解して持って行ってもらえる。組み立てもやってくれる。

自分は安く済ませたかったので、引越し業者に分解・組み立てまで全て頼みました。組立自体はしっかりやってくれましたが、釘とか使ってる箇所があるので強度は触って分かる程度に弱くなります。地震とかで壊れて重い板が倒れてきたりしたら怖いなーというのも今回処分した理由の1つだったり。(引越し業者も分解が二回目のIKEA家具だとかなり柔くなったと言ってました)

買ってよかったなーと思ったこと

捨てといてなんですが・・・

お洒落(だと自分は思う…)

これはIKEAのお店で見るからなのかもしれないけど、やっぱりニトリよりはお洒落に感じます。これは人によると思いますけど。でも似たようなもの探すと普通にニトリとかにも置いてあったりはする。

使いやすい・カスタマイズできる

ワードローブが特にそうだったんですが、自分で中身を結構カスタマイズできるので、使いやすいです。中身を網棚にしたり、木の引き出しにしたり、棚板をガラスにしたりとか。捨てといてなんですが結構気に入ってました。
ベッドもヘッドボードを選んべます。ベッド下の収納と合わせてかなり重宝してました。

結論

  • 引っ越しと同時に買うのは止めよう。IKEAの家具(に関わらずかもしれないけど)は家に運ぶと思ったよりでかい。
  • 今後、数年以内に引っ越しするなら買うのやめよう。IKEAの家具は引っ越しするの大変だし、分解すると強度下がる。

IKEAで大きな家具買うなら家かマンション買った後がよいなと思いました。

Rails + Heroku で知人のポートフォリオサイト作った話

前のブログ書いてから2ヶ月くらい立っていた…
この2ヶ月なにしてたかというと、転職活動しつつ知人のWEBサイトをRailsで作ったりしてました。自分の備忘録も兼ねてまとめておきます。

何を作ったか

イラストレータをやっている知人のポートフォリオサイトを作らせてもらいました。
これまでも作った作品や関わった仕事をまとめたサイトを自分で作っていた方なんですが、一々HTMLを編集してファイル上げたりするのが面倒とのことで、ブログを編集するような間隔でサイトを更新できるよう、Rails + Herokuで一からCMS(であってるかな?)的なものを作ってみました。
ぶっちゃけ簡単にサイトを作れるサービスって普通にあるわけですが、一から作らせて貰ったのはもう完全に自分のスキルアップのためです・・・

私について

普段はSIerで仮想化のインフラSEやっててます。会社で書くコードといえばVMwareを操作するPowerShellスクリプトくらいですが、去年の暮れにExcelで管理されてた機器リソースの情報をRailsでWEBアプリ化したりしました。
あとはJavaでの業務システム開発を1年くらい、学生時代はC++で統計解析のプログラム書いたりした経験有りですが、ひよっこです。

Railsについて

いやーJavaで業務システム作ってたときからすると、色んなことがすっごく簡単にできて触っててホント楽しいです。Railsについては深いことを語れるほどではないので、使ったgemについて紹介させていただきます。

ユーザー認証

有名ですね。サイト更新用の管理者の認証機能として使いました。

plataformatec/devise · GitHub

画像管理

これも有名ですね!画像を簡単にAWS S3に保存したりできるようになります。また色んなアップロード時に複数サイズの画像を作成できるので、ギャラリーページの作成とかでかなり重宝しました。

thoughtbot/paperclip · GitHub

今回はAWS S3をアップロード先に使用しました。以下のページをかなり参考にさせてもらいました!

[Ruby on Rails]paperclipでつくるS3への画像保存アプリ | Developers.IO

現在、aws-sdk v2にはまだ対応していないようなので、注意が必要です。

AWS Version 2 support - uninitialized constant Paperclip::Storage::S3::AWS · Issue #1764 · thoughtbot/paperclip · GitHub

開発環境でのメール送信確認

開発環境でRailsからメール送ったりする場合の確認用に使いました。送信したメールをブラウザから確認できて便利です。

fgrehm/letter_opener_web · GitHub

以下を参考にさせて頂きました!ありがとうございます。

開発中にrailsから送信したメールを確認する - Qiita

Herokuで必要なgem

HerokuでRails使うにあたり、コレ入れとけ!っていうのが公式のドキュメントで出てます。この辺を入れとかないと動かないのあったりするので要チェックです。自分は下のページ読んでなくて数時間は無駄に格闘していました・・・

Getting Started with Rails 4.x on Heroku | Heroku Dev Center

Herokuについて

Herokuは友人から聞いたり、WEBサービス作ってみた系の記事でよく見かけてましたが、ホントすごいですね。git push heroku masterでWEBアプリが動かせちゃう手軽さも凄いですが、それ以上に無料で使える豊富なadd-onが凄いなと思いました。サイトでは以下を使ってますけど、全部無料です。当然色々と制限はあるわけですが、個人で使う分には十分だと思います。

  • データベース
  • データベースバックアップ
  • 性能監視
  • ログ監視
  • メール配信

全部は長くなるのでいくつかピックアップして・・・

Papertrail

Herokuでログを収集してくれるサービスです。何か起こったときのログ調査はもちろんですが、エラーが起こったときのログをメールやSlackに送信できたりします。自分はエラーが出たらSlackに送るようにしてます。
f:id:suzan2go:20150315234201p:plain
f:id:suzan2go:20150315234202p:plain

New Relic

iPhoneアプリがあります!それだけ!w

New Relic

New Relic

  • New Relic, Inc.
  • Business
  • Free

あとはNew RelicからpingをHerokuに対して送ることで、Herokuのアプリケーションがスリープすることを防止できます(Herokuのアプリはアクセスがないとスリープする)。
Herokuに関しては以下のページをかなり参考にさせて頂いております。ありがとうございます!

妻のパン屋のWebサイトのソースコードと、サイトで活用したRails/Heroku関連の技術的なトピック - give IT a try

GitHubとの連携

GitHubと連携して、GitHubでcommitされると自動でHerokuにもデプロイできるようになってます。さらにCIサービスと連携しているので、最近のWEBサービス企業がやってる「GitHub上でプルリクエスト⇛マージ⇛テスト⇛リリース」みたいなリリース作業自動化が簡単に実現できます。

画面はこんな感じ。
f:id:suzan2go:20150315234323p:plain

サイトについて

Herokuのアプリは標準だと、「appname.herokuapp.com」というようなURLになります。これを独自のドメインに変える場合は、ドメイン管理サービスでCNAMEを使う必要があります。が、自分の使っているお名前.comなんかでもルートドメインでCNAMEを使うことができません。例えば以下のようなのは弾かれちゃいます。

appname.com ⇛ appname.herokuapp.com

こうじゃないとダメです。

www.appname.com ⇛ appname.herokuapp.com

CloudflareというCDNサービスを利用することで、Heroku上のアプリケーションでもルートドメインを使うことが出来るみたいです。自分の場合、ルートドメインを使えるようになっただけでなく、WEBサイトの表示も劇的に早くなりました。

Home | CloudFlare | The web performance & security company

以下を参考にさせて頂きました!

CloudFlare使ってHerokuでルートドメイン使おう - PILOG

UI・デザインについて

分かる人はひと目見ただけでわかると思いますが当然…

Bootstrap · The world's most popular mobile-first and responsive front-end framework.

ギャラリーのページは以下のライブラリを使いました。レスポンシブ対応で素敵!

least.js 2 - Random and Responsive HiDPI jQuery Gallery based on HTML5 and CSS3

jsのライブラリを入れるとturbolinks関連でうまく動かないことが多々あるのですが、無効にするのは何か悔しくて色々調べました。以下のページがとっても参考になりました。ありがとうございます!

Ruby - Turbolinksをオフしないためにやった事 - Qiita

Rails4でturbolinksを謳歌するためのまとめ [俺の備忘録]

作ったWEBサイト

で、結局どんなん作ったかというと、こんな感じのサイトを作りました!

ryonon

人のWEBサイト作ることで学べたこと

誰かに見てもらうものを作ることで出てくる「ここはもっとこうしなきゃ!」と「もっとこんなふうにできない?」という要望に答えることで、何というか一歩スキルアップ出来た気がします。自分で一人でローカル環境でちょくちょく弄ったりするだけだと、どうしても「ここはこんなもんでいいか」という箇所出てきちゃいますしね。

分からんことはググれば大体出てくる!けどそれでいいのかなとも思った

上で色んな方のページを参考にした通り、分からんことは調べれば大体分かるんだけどそれでいいのかなとも感じました。特にrails回りは進化のスピードが早いこともあって、記事の内容が現在のバージョンでは使えないということも。日本語で書かれたノウハウ記事は本当に参考になるわけですが、公式のドキュメントやソースをちゃんと確認しなきゃと感じました。また他人の記事を参考にするだけでなく、自分で元の英語ドキュメントを理解して使えるようなりたいなとも思いました。

gem使えば便利な機能がすぐに使える!でもそれで(ry

deviseやpaperclipで提供される機能を自分で一から実装したらきっと相当時間かかるわけなんで(というか俺実装できるのだろうか)、本当にすごい!そして簡単にWEBアプリがデプロイできちゃうHerokuばんざい!でもこれに乗っかるだけで良いのかなとも思いました。


「ドワンゴはケンカしたら弱い会社」川上会長がデータセンターを作りたい理由 Developers Summit 2015 基調講演 - 週アスPLUS

「努力しなくても新しい半導体工場で生産すれば勝手に性能が向上した。優れた回路設計によって性能をチューニングするより、新しい工場でさっさと作ったほうがいい。これってどっかの業界の未来じゃないかと」

gemにしてもherokuにしてもすっごく便利なんだけど、中身ちゃんと分かった上で使えるようになりたいなと。そんでできればgemとかライブラリとか作ったりもしたいですね。

そんなこんなで

SIerからWEBサービスの企業に転職することになりました。その辺りはまた別の記事にまとめたいと思います。久しぶりにブログ書いたらすっごい時間かかった。。。

Ruby初心者だけどRuby Association Certified Ruby Programmer Silverを取得した!

Rubyを始めて2ヶ月くらいですが、Ruby Association Certified Ruby Programmer Silverを取得しました!ので受験記録を書きます。

他の方のブログの受験日記では、「ちょっと勉強すれば取れた」的なことが結構書いてあったので、舐めてほぼ無勉強で受けたら普通に一回落ちました。きちんと勉強して2回目はバッチリ受かったので、これから受けようと思っている方の参考になれば幸いです。
ちなみに再受験無料キャンペーン中だったので、2回目は無料で受けられました!

Rubyアソシエーション: Ruby技術者認定試験再受験無料キャンペーン

私とRuby

Rubyの経験は2ヶ月程度。といっても本職はSIerのなんちゃってインフラSE(しかも仮想化)なので、仕事でバリバリ使ったわけではなく、仕事の合間にRuby on RailsのWEBアプリ(リソースの集計やらなんやら内部で使う簡単なもの)を作ってみたり、家で本を読んだりした程度。プログラミング初心者というわけではなく、以下の言語は使ったことがあります。

  • C++
    • 大学院のとき2年ほど。ROOTという統計処理ライブラリを使った解析プログラムを書いてました。
  • Java
    • 会社入ってから1年弱。jspにゴチャゴチャとロジックが書いてある2000年頃に作られたふるーいシステムの改修したり、Java FXを使ったGUIアプリ作ったりしました。

1回目の受験

転職に向けて自分のスキルを客観的に示せるものが欲しいなー思い、「年末年始に勉強して、仕事始めの週末に受けるぞー!」と年末に申し込みました。ただ体調崩したり全然別のこと(友人のWEBサイト作り)とかやってしまって全然勉強できなかったのですがね。。。で、直前にキャンセルしようと思ったら、もう期限切れ…という状況で勉強を始めたのは試験を始めたのは2日前からでした。

勉強に使ったのは以下のサイトです。
とりあえず練習問題を2週して、大体解けるようになったので「いけるんじゃないか・・・?」と思ってしまいました。
ミニツク - Rubyのe-ラーニング研修システム

結果は・・・惨敗。ミニツクの問題が悪いわけではありません。。。問題が出来るようになったのはただ単に答えを覚えてしまっていただけでした。そして単純に知識のなさを痛感。Railsをちょっと触っただけでは知らないメソッド、文法がいっぱい出てきました。

二回目の受験に向けて

Rubyの基本をお勉強

そもそもRailsの勉強はしたけど、Rubyは真面目に勉強してない状態だったので、改めて1からRubyを勉強することにしました。

まず読んだのは、色んなブログで見かけますが以下の本。

自分が買った本の帯には「本書は初心者の気持ちを裏切らない出来になっています -Rubyの父 まつもとゆきひろ」と書いてあるのですが、本当にその通りだと思います。Rubyではこうやって書く/書ける、Rubyはこういう作りになっている、ということが綺麗に体系立てて書いてあるので、さーっと流して読んでもかなり勉強になります。試験で問われたことも結構出てくるので、本当にこの本を済から済まで勉強すれば(読むだけでなく実際に動かして覚えるとこまですればですが)、試験対策はいらないかもなと思いました。

試験対策

本で勉強

とはいえ再受験の期間が1月までだったので、とりあえず以下の本を買いました。レビューでも書かれますけど、対象のRubyバージョンがかなり古い(本は1.8.7系、試験は2014年10月より2.1)ので、挙動で??ってところがあったら調べてみた方がよいです(あと結構誤植が…)。「1.8.7まではこうだけど1.9以降はこうなるよー」って注意書きは一応あります。

Ruby公式資格教科書 Ruby技術者認定試験 Silver/Gold対応 (EXPERT EXPASS)

Ruby公式資格教科書 Ruby技術者認定試験 Silver/Gold対応 (EXPERT EXPASS)

模擬試験が一式ついていますが、これと同じような問題が本番の試験にも結構出ました。Rubyの基礎は分かっている!って人は、模擬試験目的に買ってみても良いと思います。私みたいな初心者の方は、試験以外のところも一通り目を通すと「こういうところが問われる/こういう挙動に注意」というところが分かって良いです。

公式リファレンスを読んで勉強

あとは出勤時間なんかにスマホからRubyのリファレンスマニュアル読んでました。
オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル
他の方の合格記にもリファレンスマニュアルを読んだーとよく書いてあったので真似しました。丸暗記できればそれがいいと思いますが、自分は無理なので以下を意識して読みました。

  • メソッドが破壊的か非破壊か(chomp!/chomp 、concatとか)
  • 同じ動作で違う名前のメソッドがあるか(detect find とか)

実際に動かしてみる

基本暗記の試験なのでアルゴリズムを問われたり実際に書けとかは無いわけですが、実際に自分で動かしてみると身につくし理解も深まります。自分のMacにも実行環境はあったのですが、ここ変えたらどうなるんだろ?っていうのが直ぐ試せるという意味だとWEB上の実行環境って都合がよいです。paiza ioというサイトで自分は色々試してました。
ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO

感想

プログラミングって「必要な部分だけその都度勉強」ってなりがちだと思うんですけど、資格を取るとなるとその言語について体系的に学ぶことが出来てよいですね!当たり前の話ではあるんですが、Rubyを真面目に勉強した後Railsアプリを見てみると「これはこういう意味だったのか!」というのが結構あります(まー裏返すと如何に自分が理解せずに使ってたかってことなんですがね)。
学生の方でも結構取っている人がいるようなので、これだけではアピールに全然ならんと思いますが、「最低限何か書ける/分かっているんだな」と思ってもらえると嬉しいな。

また無料キャンペーンがあったらGold受けたい。

PowerShell(PowerCLI)でフェールオーバーホストになっているESXiを判定する。

普段の仕事ではサーバ仮想化関連のSEをやってるのでその話を。色々平行して作っているのですが、まだお見せ出来る状態じゃなくて悔しい!1月中にはなにか公開できるかなと思います。

※以下、会社でやったことを思い出しながら書いてるので、動かなかったらスミマセン・・・

VMwareではHA(High Availability)という、ESXiと呼ばれる仮想化ホスト(物理サーバ)の障害によりその上にいる仮想マシンが停止した場合に、他のホストに仮想マシンを自動で移動させて再起動させるという機能があります。

このHAには大きくわけると以下の様な設定があります。

  1. 特定のESXiサーバをHA専用機(フェールオーバーホスト)として用意し、通常時は仮想マシンを起動させない。
  2. クラスター(ESXiサーバ群)全体で、X台のESXiサーバが停止してもリソースが確保できるようにする。

実際どうなのかはわかりませんが、1にしているパターンが多いのではないでしょうか?

PowerCLIについて

PowerCLIとはVMwareが提供する、PowerShellで動くESXiサーバの管理ツールです。vCenterサーバに接続して使えば、以下のようにしてVMの一覧や、データストアの一覧が取得できます。VMwareの管理で問題になりがちなスナップショットの一覧も取得出来て便利です。以下のように使えます。

gistf9d0e36afcabd17131ad

フェールオーバーホストになっているESXiホストを判定する

前置きが長くなりましたが、タイトルの件について。フェールオーバーホストを指定してシステムを運用していると、例えばフェールオーバーホストのリソースは除いてリソース総容量は計算しときたいとか、まあ色々あると思います。PowerCLIのコマンドでフェールオーバーホストを一発取得する方法はないのですが、フェールオーバーホストの情報は実はGet-Clusterで取得できるclusterオブジェクトのなか、ExtensionDataに定義されています。

「ExtensionData.Configuration.DasConfig.AdmissionControlPolicy.FailoverHosts 」

FailoverHostsの中に、その名前の通りフェールオーバーホストに指定されているESXiサーバのID(ホスト名ではありません!)が配列で格納されているので、このIDを使えばフェールオーバーホストを特定できます。以下、サンプルです。

gist66289adf0bbf85f3529d

参考

ExtensionDataの中に情報があるなんてことは、正直全然自分じゃ見つけられませんでした。以下のページで見つけました。公式のドキュメントにも書いてなかった気がするけど、下の人はどうやって見つけたんだろう?

A function to lookup Host System friendly name by MoRef using PowerCLI | Shogan.tech

おまけ

PowerCLIで取得出来る情報をConverTo-Jsonしてみると、vCenterのGUIから(多分)取ってこれない情報(仮想マシン上でのディスク使用量とか)があったりしますよ。お試しあれ。

今年の抱負的な何か

いつか更新しようと思ってたら一ヶ月たってしまった。。。
今更感ありますが、今年の豊富を書いとこうと思います。

毎週ブログを更新する!

8月から書き始めたはいいけど月一になってしまいましたね。自分がやったことを定期的にまとめると、記憶の整理にもなるし理解があやふやなところの発見にも繋がるのでちゃんと書いてこうと思います。去年はインフラの運用がメインの仕事だったりして中々かけることがなかったりしたのですが、上司に半ば無理やり取り行って運用改善のためのRailsアプリ作り始めたりしたので今年はもう少しかけることが増えるかな。twitterではちょっと書きましたがd3.jsをラップして使うjsライブラリを仕事で使ったので、紹介したいと思います。

履歴書にかける仕事をする

転職活動してて思ったのですが、自分って「これ自分がやりました!」と胸張って言える仕事があんまりないんですよね。プロジェクトの中で細かい改善とか、ツール導入とかは結構あるんですけど。上に書いたこととも被りますが、いまやってる運用改善のためのRailsアプリを1つまとめたいな。

何か1つWEBサービス作る!

去年はnode.jsを使ったRedmine用のクライアントアプリを公開したりして、そこそこ見てもらえたりしました。

Redmineクライアントのバグを色々と直しました。 - suzan2号の戯れ

が、やっぱりWEBサービス作ってみた!というのやっぱり凄く羨ましい。得られるレスポンスも違うし。友人とも色々やりたいねーという話はしてるので、今年中に何か作って公開したいなと思います。

いまやっていること

イラストレーターの友人のWEBサイトをRailsで書いてます。どうしても更新が億劫になってしまうとのことなので、イラストや担当した仕事の内容を簡単に更新できるようなサイトを、自分の勉強も兼ねて作らせて貰ってます。

有限不実行にならないよう頑張るぞー!

Redmineクライアントのバグを色々と直しました。


suzan2go/RedNodeKit · GitHub

会社のPCにDLしてみたはいいものの、色々とバグが多かったので…
あと地味にトラッカーをちゃんとプロジェクト毎のもの持ってくるようにしました。