ng-mtg#4 AngularJS勉強会 #ng_jp
Togetter
http://togetter.com/li/598391?utm_source=dlvr.it&utm_medium=twitter
2013/12/03@サイバーエージェントでのAngularJS勉強会に行ってきました!
僕は普段JSを書きまくってるわけではないですが前回のプロジェクトでBackboneを使っていたので最近話題のAngularにも興味を持ち始めた(とはいえ触ったことは一切ない)という状態で参加しました。
楽しかったー!ほとんどメモですが書きますー。
AngularJS 20min
AngularJS 20min #ng_jp // Speaker Deck
@naoya_ito さん
はじめにこの発表があったおかげでかなりangularが腹落ちした感じでこの後のセッションをきくことが出来ました。さすがでした。初心者or まだ触ったことがない方はぜひスライドを見てみるといいと思います!
# memo AngulerJSはjs MVW Framework Model View Whatever (初期はMVVMっぽかったけどそういう議論は時間の無駄) MVCとかっていう型よりangularjsはangularjsって思って学ぶ方がいい 特徴 ・htmlそのものがテンプレート ・双方向バインディング ng-controllerとかng-repetとかをhtmlに書いていく感じ アプリ側に関数用意して$scopeで渡す アプリ側(angularjs側)はDOMの構造を知らない DOM関連の値がない。HTMLからアプリを掴みに行く HTML構造の変更に強い 要するにtemolate-toolkitとかerbとかみたいなもの アプリ側から見た目を動的に替えたい時はngshowとかで なるだけDomを掴まない 制約ある HTMLにロジックは書けない リモートのJSONデータもバインド フィルター機能も簡単 FormValidationもある HTMLを拡張して動的なアプリを作るのに必要な機能をいっぱい追加してるのがangularjs 本格的に使おうとすると大変な部分もある
簡単なものをさらっと作る場合には本当に労力使わずに綺麗に高機能に作れそうだなという印象。とりあえず使ってみたい!
OnsenUI
続いてOnsenUIを作っているお二方の登壇。
Home | Onsen UI
OnsenUI モバイル用のUIを簡単に作れる
元自衛隊員の方とカンボジア出身の方の発表でした。なんとメモを取っていない、、AngularJSを多少使っている方には良いプレゼンだったかも!AngularというよりOnsenUIに興味を持ちました! (スライドも発見できず。。見つけたら追記します!)
実践! AngularJS
@sakatam さん
AngularJS 勉強会 #4 - 実戦!AngularJS // Speaker Deck
実践でどうAngularを使っていくかという発表とその時のTipsなど。実務で導入できるようになったらもう一度見直したいスライドでした!開発スケジューリングも勉強になりました。
# memo 柔軟性にはbakboneに劣るが モジュール/ベースの開発を強制 DI/Module APIレスポンスもmock可能 week1-3 開発基盤づくり ファイル構成、ビルドプロセスを調べたり APIクライアントなどの基底クラス week4-5 チーム展開 フロントエンドエンジニアにしっかり慣れてもらう DI/モジュール志向/テストファーストの概念理解 ちょっとしたdirectiveを作ってみる week6-12 実開発 普通にテストファーストでできる モデリング→UnitTest→Viewスケルトン実装 End2EndTestはクリティカル・パス確認用
目指せ脱初心者!あなたの知りたかったAngularJS
@agektmr さん
Directiveの話をかなり詳しくしてくださってましたが、聞き入ってしまっていてほとんどメモとれず。。後日スライドあげてくださるようなのでこちらも追記します。
# memo これ使うと便利 http://jsbin.com/welcome/1/edit 書き方が超勉強になると実力者の方々がおっしゃっていたもの。 本家の方々が書いたやつ http://demo.agektmr.com/flexbox/ web-components polymer-project
以下LTメモです。一人目の方のしかメモしてなかった、、
angularjs入門 @Tkashiro さん。kayacの方
social-counter <- Angularで作ったもの
【初心者が学ぶときにおすすめなリンク集】
動画で学べるサイト。これが全てといってもいい
egghead.io: Learn AngularJS with Tutorial Videos & Training @eggheadio
Page not found · GitHub Pages
AngularUI for AngularJS
Popular Modules - AngularJS Modules, Plugins and Directives
まとめ
JSそのものを書くことが楽になりそう。backboneよりも最初の勉強コスト低い?業務で一度使ってみたいなーー!!!って感じ!
かなり有意義な勉強会でした!
主催者のみなさん、登壇者の皆さん、ありがとうございました!
Capybara使うときに横に置いておくと有用なリンク集
matcherを調べるときに見ると良い
http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers#has_selector%3F-instance_methodよく使いそうなリファレンス一覧
http://qiita.com/ToruFukui/items/130eeb61d8ab2883466expathでの指定もできるのでxpathのリファレンス?的な
http://itref.fc2web.com/xml/xpath.htmlこう書くのがいいよ!の例
http://robots.thoughtbot.com/better-acceptance-tests-with-page-objectsこれいいかも!(まだ試せてない、、)
https://github.com/natritmeyer/site_prism
他にあればぜひ教えて下さい!
CapybaraでE2Eテストを始める
WAFに依存しない形でCapybaraを導入してE2Eテストを書けるようになるところまでの導入です。テストの実行自体はRSpecを使います。
$ mkdir capybara-test $ cd capybara-test
適当にGemfileを作ってbundle installで入れます
# Gemfile source "http://rubygems.org" gem "rspec" gem "capybara" gem "capybara-webkit"
今回はcapybaraのドライバーはcapybara-webkitを使用しています。
※capybaraのドライバについては下記リンクが詳しいです。
poltergeist - Capybaraを使う際に知っておきたいこと - Qiita [キータ]
$ bundle install
ここでqtがないからインストールできない的なエラーが出るかもしれません。上記リンクに記述がある通りcapybara-webkitがqtに依存しているからです。 その場合は下記リンクより自分の環境に合わせた解決策を実行してみてください。(私の場合はmacだったので、brew install qtでできました)
Installing Qt and compiling capybara webkit · thoughtbot/capybara-webkit Wiki · GitHub
インストールできたら、次にrspec initでspecディレクトリとspec_helper.rbを作ります。
$ bundle exec rspec --init
capybaraを使うためspec_helperに次の記述を追加します。
# spec_helper.rb require 'capybara/rspec' require 'capybara-webkit' # ここは各自合わせて下さい Capybara.app_host = 'url' Capybara.javascript_driver = :webkit RSpec.configure do |config| … config.include Capybara::DSL end
ここまでできたらあとはspecファイルをsepcディレクトリ内に作っていってテストを実行していきます。
# spec/login_spec.rb require 'spec_helper' describe 'login', :type => :feature, :js => true do it do visit 'http://test.com/login' fill_in 'login', :with => 'test_user' fill_in 'password', :with => 'password' click_button 'Login' expect(page).to have_content('Logged in as') end end
詳しい書き方はREADMEを見て下さい。
https://github.com/jnicklas/capybara
あとはアサーションを書いてキャプチャを撮ったりも簡単にできるのでどんどん書いて実行していってみてください。
Rubyのワンコールブロックがイケメンな話
またメタプログラミングRubyネタ。小ネタです。
著者がRubyは簡潔にかけていいけどイケてないと言っているのが
name = ["i", "my", "me"] name.map{|n| n.capitalize } #=> ["I", "My", "Me"]
って感じのが、パイプとか中括弧とかでブロック作ってややこしい、と。 確かにその通りです。ちなみにこれをワンコールブロックというそうです。
ですが、これをRuby1.9以降ならSymbolのProc変換という方法で超簡潔にかけちゃいます!
name = ["i", "my", "me"] name.map(&:capitalize) #=> ["I", "My", "Me"] string_numbers = ["1", "2", "3"] string_numbers.map(&:to_i) #=> [1, 2, 3]
イケメン!! ちなみに1.8系とかでも自分で簡単に実装できちゃいます。
なぜこれが動くかとかは下記のサイトが丁寧だったのでご参考まで。
Rubyのメソッドの引数あれこれメモ
配列引数
複数の引数を1つの配列として扱うにはアスタリスクをつける
def my_mthod(*args) args end my_method(1, 'hoge', 'three') #=> [1, 'hoge', 'three']
キーワード引数
Ruby 2.0からの機能(同じことは1.9系とかでもできるがハッシュを展開しないとダメ)
def my_method(name: 'test user') name end my_method(name: "test new user") #=> "test new user"
メソッド定義の際の引数にdef my_method(:name => 'test user')って書き方はできないみたい。 ただ、メソッドを呼び出す際の引数に上記は可能。つまりmy_method(:name => 'test new user')はOK
Rubyist Magazine - Ruby 2.0.0 のキーワード引数
ブロック引数、Procの引数に関しては下記のQiitaの記事が非常にわかりやすかったのでぜひご一読下さい。
MySQLのデータを定期実行でバックアップ
サービス運用してるとバックアップ取ると思うのですが、
毎回調べるので自分のブログにメモ。
backup_db.shとかで。 このシェルスクリプトをcronで定期実行するイメージです。
#!/bin/bash TODAY=`date +%Y%m%d` BACKUP_DIR=/data/backup/db BACKUP_INTERVAL='+3' for database in `mysql -uroot -N -s -e"show databases"`; do if [ $database == 'DB名' ]; then nice mysqldump -uroot --single-transaction --no-autocommit ${database} | pbzip2 -cv -p4 > ${BACKUP_DIR}/${database}-${TODAY}.sql.bz2 fi done find ${BACKUP_DIR} -type f -name "*.bz2" -mtime ${BACKUP_INTERVAL} | xargs rm -Rf
mysqldumpのオプション http://open-groove.net/mysql/autocommit/ http://blog.lampetty.net/blog_ja/index.php/archives/292
findコマンドのmtimeオプション http://doruby.kbmj.com/SK/20090731/find_mtime_
findしたやつをxargsコマンドで削除 http://openlab.dino.co.jp/2008/02/20/133431188.html
pbzip2 http://blog.cloudpack.jp/2011/08/aws-news-c1xlarge-pbzip2.html
ちなみにcronはこんな感じ
0 4 * * * root sh /path/to/backup_db.sh > /dev/null 2>&1
Rubyでxls(Excelファイル)を簡単にパースする方法
すごく簡単でドキュメント通りな内容なのですが、非常に便利だったのでメモ。
その名もSpreadsheetというgemを使います。 https://github.com/zdavatz/spreadsheet/blob/master/GUIDE.md
# Gemfile gem 'spreadsheet'
# vim hoge.rb Spreadsheet.client_encoding = 'UTF-8' book = Spreadsheet.open '/path/to/an/excel-file.xls' sheet1 = book.worksheet 0 # スプレッドシートの1枚目を指定 sheet1.each do |row| # do something interesting with a row end
たったこれだけです!超簡単! 配列でrowの部分にデータが入ってくるので扱いやすくてよいです。
スプレッドシートの指定の仕方はindexで指定しているのですが(なので2枚目だと1を指定すればよいです)、シート名をそのまま書いても大丈夫なようです。(ex. sheet1 = book.worksheet 'Sheet1')
また、Spreadsheet.open部分はRailsの場合だとexpand_pathとか使えなくてめんどくさそうと思ったのですが、普通にアプリルートからのパスで通りました。
なのでbatchスクリプト内で実行する際は
book = Spreadsheet.open 'bin/batch/excel-file.xls'
などと書いておいて、コンソールから
$ rails r bin/batch/hoge.rb
で大丈夫です。