カテゴリー別アーカイブ: プログラム

関西Ruby会議に行ってきた


話を聞いていたから、ほとんどメモはなかった。
すごいざっくりとした感じ。。
久々にこういう大きめのカンファレンスに出て、気持ち的なモチベーションは上がった!!

関西Ruby会議2017

フリーソフトウェア開発

Rubygem開発の流儀

‘何か考えて形にしてリリースする’ ということにハードルがある

  • 困っていることを正確に把握する
    • なんのせいで不便になっているのか
  • 開発に関わる手間が少ない方がいい
  • 運用コストが低い方がいい
  • 原動力
    • 日常の怒りや不満を言語化すること
    • 何がツライのかを説明できること
  • 引き出しを増やすこと
    • 頭のインデックスに引っ掛けるようにする
    • リファレンスマニュアル
    • 抽象化にはデザパタの知識は役に立つ
    • 既存のソースコードからパクる(ライセンスは確認)

CoderDojoを支えるRailsCMS活用事例

CMSのツールとしてよさそうだなぁー

18年でRubyから学んだこと

伽藍とバザール

RubyKaigi 2016に行ってきた


RubyKaigi 2016 に行ってきた。
京都開催ということで美味しいものもいっぱいあったし、なにより懇親会で「まつもと」という日本酒がとてもうまかった。
技術的ことはもっと身につけないとという意識が高まったし、英語のトークが資料を見ながらふんわり理解できるくらいなのがだいぶ悔しい感じだったので、どっちももっと頑張らないとという意識が高まったのが参加したメリットだったかも。

まつもと

以下からは簡単なメモ。

スライドなどは以下のサイトにまとめられていました。動画も後日公開されるかもです。

「RubyKaigi2015」全公開済みスライドまとめ #rubykaigi | TechStars Blog

Binding(How to create bindinngs 2016)

GObject Instropection を使うのが良い
C拡張Lib だけど Bindingではないものもある。
Ruby FFI(libffi implを使ったライブラリ)

require 'gi'
GI.load

Scalable Job Queue System Built with Docker

Cookpad Barbeque というジョブキューの発表でした。
とてつももなく参考になる内容だった!!

Modern Black Mages Fighting in the Real World

fluentd1.4系の黒魔術のすごさ。。。

昨今のWebフロントエンド開発環境を調べてみた(2014年ごろ)


メモっていたのを、、忘れてしまうので公開します。

参考

資料

Javascript周り

Grunt

タスクランナー(Rakeのようなもの)
JavaScriptの連結や圧縮、SCSSなどのコンパイルをするときに使う。それだけじゃなくファイル更新をトリガに一連のタスクを自動実行するなどにも使える.

glup.jsというのもある

gulp.js チートシート – Qiita
【Gulp.js入門】新鋭フロンエンド・タスクランナーツール を試してみました。 | Developers.IO

bower + require.js

bower.jsonに利用するライブラリを書いてbower installすると.bowerrcに書かれたライブラリを一括ダウンロードできる。
インストールしたライブラリを<script src=“”>で読み込むものを一個ずつ指定するのは面倒なときにrequire.jsを利用する

mocha + expect.js

BDDスタイルテストフレームワークであるmocha、マッチャーを提供するアサーションライブラリのexpect.js

sinon.js

mockやstubなどテストダブル(ダミーオブジェクト)を利用するときに使用する。
「Spy」「Stub」「Mock」「Fake Timer」「Fake XHR」

karma

testの自動実行(遠隔実行)ライブラリ。テストの更新を検知して複数のブラウザでテストを自動実行してくれたりする。
Karma(元Testacular)を使って簡単にテストを実行しよう

testemというのもある

phantom.js

WebブラウザなしでJavascriptの実行などが行える。コマンドラインから扱えることが便利。ただwebkitエンジンのみ
JavaScriptの自動テスト <=だけどphantom.jsのことが書かれている

backbone.js + underscore.js

backbone.jsとその依存ライブラリのunderscore.js。
使ったこと無いから以下を参考にしよう。

jquery

いつものですね。

jquery-template or ejs

テンプレートエンジン

foreman

プロセスを管理。Gruntとアプリサーバなどを同時に管理したいときなど


CSS周り

sass + compass

sassですね。sassの拡張compassですね

twitter bootstrapなどのCSSフレームワークはいろいろある。

http://liginc.co.jp/web/html-css/html/21108

Font Awesome

http://fortawesome.github.io/Font-Awesome/examples/
フォントのアイコンライブラリ


特記

Middleman

上に書いたようなGruntとかを使った環境のオールインワンパッケージ
http://hokaccha.github.io/slides/middleman_frontend_dev/

pub / sub のメッセージングモデルの考え方について


関連記事

実装編

require.jsを利用した場合のディレクトリ構成

/
├── sources/
│     ├── css/
│     │   ├── lib/
│     │   └── sass/
│     ├── js/
│     │   ├── lib/
│     │   ├── src/
│     │   │    └── require.config.js
│     │   └── test/
│     │        └── require.config.js
│     ├── node_modules/
│     ├── Gruntfile.coffee
│     ├── config.rb
│     ├── karma.conf.js
│     └── package.json
│     
└── public/
      ├── api_stub/
      │   └── recent_sites.json
      ├── css/
      │   ├── common/
      │   ├── lib/
      │   └── 各種CSSファイルやディレクトリ
      ├── js/
      │   ├── common/
      │   ├── lib/
      │   ├── 各種JSファイルやディレクトリ
      │   └── require.config.js
      └──img/
          ├── common/
          └── 各種画像ファイルやディレクトリ

require.jsの実践編

以下の通りhtmlでrequire.js関連ファイルを読込む

<script src="/js/require.config.js"></script>
<script src="/js/lib/require.js" data-main="/js/users/index.js"></script>

上記のタグで読み込んでいる箇所は require.js を読み込んだあとに data-main のjsファイルを読み込むことができる。

ここでは /js/require.config.js では実際に require メソッドを使ってconfigを実行していなくて、設定のハッシュだけを作成している状態。

data-mainで指定している各ディレクトリのjsの中で require メソッドで実行して、require.config.js 内のハッシュ設定部分を実行させている。

npm Tips

以下のコマンドにてnpmインストールしすつつpackage.jsonを更新できる。

# package.jsonのdevDependenciesに追加される
npm install hogehoge --save-dev
# package.jsonのdependenciesに追加される
npm install hogehoge --save

gulpとかnpmのこととか by A Memorandum <=ここにもnpmの使い方。 –save-devの説明が簡単に載っている

gulp

# globalに入れる
npm install -g gulp

# 各プロジェクト配下に入れる
npm install --save-dev gulp
npm install --save-dev gulp-concat

Browserify

Browserify: それはrequire()を使うための魔法の杖 – Qiita
JavaScript – BrowserifyでBackbone.jsを使うときのjQueryの解決 – Qiita

[rails]Rakeタスクでのtask定義の「:environment」引数について


Railsのジェネレータで生成したタスクのrbファイルを見ているとRakeタスクを定義するところで少し疑問に思ったことがあった。

railsのジェネレーターで以下のとおりにタスクを作成する。

% rails generate TASK_FILE_NAME TASK_NAME

例)
% rails generate hoge test

例)のように実行すると lib/tasks/hoge.rb ができて testというタスクが定義される

namespace :hoge do
  desc "TODO"
  task test: :environment do
  end
end

タスク定義のところで「:environment」 という引数が渡されているが、どういうこのことなのかを調べてみた。

「RailsでオリジナルRakeタスク作成からRSpecテストまで」 の記事の中に以下の一文があったので実際に試してみる。

:environment は モデルにアクセスするのに必須

引用:RailsでオリジナルRakeタスク作成からRSpecテストまで


lib/tasks/hoge.rb を以下のように変更する。

(Userモデルのデータは別途用意していることが前提)

  1. testタスク :environmentの引数を渡さない
  2. test_twoタスク :environmentの引数を渡す
namespace :hoge do
  desc "does not huve environment args"
  task :test do
    puts User.first
  end

  desc "has environment args"
  task test_two: :environment do
    puts User.first
  end
end

それぞれを実行する

  • 1.testタスク :environmentの引数を渡さない
% rake hoge:test
rake aborted!
uninitialized constant User
…省略

=> なんか「uninitialized constant User」という例外でエラーになる。


  • 2.test_twoタスク :environmentの引数を渡す
% rake hoge:test_two
# <User:0x007fadd5f68a80>

=> ちゃんとユーザを取得できている

まとめ

RailsでRakeタスクを使ってActiveRecordのモデルなどを扱うときは 「:environment」引数を渡して上げると良い!

さらに、実行時にもenvironmentを呼ぶことが出来るようだ

rakeタスク実行時に environment をよんでから hoge:test を呼ぶ

% rake environment hoge:test

コードは読んでなく検証しただけなので、もっと詳しくは調べないとなー

Rails向けプリローダ spring1.0 で Rubygemsのバージョンアップが必要な件


rbenvでインストールしたrubyでRails向けプリローダのspringが1.0にメジャーアップしていたので、
使ってみたら、RubyGemsのバージョンが低いというWarningが出る。。。

Warning: You're using Rubygems 2.0.14 with Spring. Upgrade to at least Rubygems 2.1.0 and run `gem pristine --all` for better startup performance.
Version: 1.0.0

そこで、RubyGemsのアップデート方法を以下に書きます。(ずっとBundlerを使っていたので、急にRubyGems本体のアップデートとかやろうと思っても分からなかったので、、、)

アップデート手順

参考:
新しいgemのアップデート方法(rubygems-update)
本当有難うございます。まんまの手順でした。。

1.rubygems-updateをインストールする

% gem install rubygems-update

2.アップデート前確認

アップデート前にRubygemsのバージョンを確認しておく

% gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.14
  - RUBY VERSION: 2.0.0 (2013-11-22 patchlevel 353) [x86_64-darwin12.5.0]
省略

3.アップデート実行

% update_rubygems

4.アップデート後確認

% gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 2.1.11
  - RUBY VERSION: 2.0.0 (2013-11-22 patchlevel 353) [x86_64-darwin12.5.0]
省略