ruby

Rubyのメソッド名がなんだかおかしい話

さて、Rubyですが、ある機会に標準ライブラリの名前を一通り見直してみました。

そうして全体を見てみて気づいたのですが…、Rubyの標準ライブラリって"変"な名前のメソッドがたくさん存在しているのですね。

不満に対して吐き出す意味でも、自分の思考を整理する意味でも、丁度良い機会なので記事にさせて頂きましょう。

 

 

1.単語の語順がなんだかおかしい

Rubyはスネークケースでメソッドに複数の単語を繋ぎますが、動詞、前置詞、名詞の語順が全く不統一なんですよね。

例えばよく使われるメソッドとしてModule#desine_methodがありますが、これの属しているModuleクラスのメソッドは例外が数多く存在しています。定数を管理するModule#const_getとModule#const_setなどがその例です。動詞が末尾に移動していますね。

Module#class_variable_get、Object#instance_variable_getなど実質ゲッターやセッターとして振舞っているメソッドが、その語順になっているのですが、次のメソッドの並びを見て違和感がある閾値を超えました。

Module#class_variable_get : クラス変数の値を得る。
Module#class_variable_set : クラス変数を設定する。
Module#remove_class_variable : クラス変数の削除。

removeだけはいきなり語順が変わる。何故なんでしょうね。

 

 

2.過去形がおかしい

Rubyは過去形でメソッド名を付けているものがあります。

例えばFile#closed?メソッドがその例です。ファイルは一度開いて閉じ終わった事を確認するのでその意味は分かりますが、そもそも英語の場合過去形で表現したものは日本語と違って今でも継続しているであろうというニュアンスは持っていません。

例えば、車を買ったと言っても今でも持っているであろうとニュアンスは持っていないです。

そのうえ、Module#autoload?メソッドは過去形でなかったり、その差は何処から来ているのか示されていない状態です。…なんなのでしょうね。

 

 

3.返り値の型がおかしい

Rubyは慣習として末尾に?を付けるメソッドは、真偽値を返すようにしています。

…がこれがRuby本体の中ですら意外に徹底されていない!?

先ほど出したModule#autoload?メソッドがその一例。

マニュアルを見てみるとこう書かれています。

autoload 定数がまだ定義されてない(ロードされていない) ときにそのパス名を返します。 また、ロード済みなら nil を返します。

他にもファイル関連のFile#world_readable?File#size?などのメソッド、あとはdefined?文もBooleanに見えて違うクラスを返す様になっています。

Rubyはその手触りの良さから広く普及しましたが、重箱の隅をつついてみると、最初によく考えないで作ったメソッドが仕様変更の機会無く澱のようにヘドロの様に積み重なっているライブラリ群が見え隠れしています。

Ruby自体は後方互換を大事にしている言語ですが一度冷静になって丁寧に不要となっている機能を整理整頓することを考えても良いのかもしれません。

Kernel#iterator?File#exists?など、廃止候補を明言しているメソッドも実際存在していますしね。

Published on 05/27/2017 at 17:11 under .

Rails管理画面gem:Administrateの日本語ファイル用意しておきます

最近Administrateというgemが管理画面生成の道具として良い出来らしいと聞いたので試してみた所、流石thoughtbot、という感じの納得の設計感で、まだver0.3という感じで実用性に関しては機能不足なのを感じますが、今後を期待して周辺環境を自分でそろえていこうという感じでまずは手軽にできる日本語翻訳ファイルから転がしていくことにしました。

そのうち、気が向いたら他の道具もそろえていきたいですね。

Published on 03/14/2017 at 12:45 under .

Railsをガラホに対応させるgemをアップデートしました

去年、ガラホが発売されるのに合わせて、出したRuby on Railsをガラホに対応させる、どこの需要でできているのか微妙なGemですが、DOCOMOからもガラホの新機種が発売されるとのことで、新機種を対応させました。

正直、テストはロクにしていないので、バグっていたら連絡ください。

しかし、ガラホは以前公開した時は「闇端末の香りがする」と言ってしまっていましたが、実際触ってみると端末の完成度はなかなか高いですね。

OSのカスタマイズはどの機種も同じ会社で一括して行なっている様で、操作系は統一されていますし、スマホ向けのページの表示も崩れることがほとんどなかったです。

今年はPanasonicや京セラもガラホに参入して機種も増えましたし、料金プランも改定されて、データ通信しなければ月々1800円で使えるプランも出てきて、Wifiにも対応して着実に、ガラケーを置き換える準備を整えてきていますね。

身内にお試してガラホオススメしても致命傷にはならない感じになったので、機種変考えている人は検討に入れてください。私も考えていますし、後日レポートするかも。

Published on 11/19/2016 at 08:28 under , , .

Rails Plug-in:flexturesを4.0にアップデートしました!

 

今回のの大きな変更点は、テストの実行回り。

これまで、rspecと組み合わせて実際のテストもflextureによって書いていましたが

やっぱり読み込み速度に関して無頓着すぎたので、なるだけfixturesの代わりに全部flexturesを使っても早くなるように、なるべく読み込み結果をキャッシュするようにして、速度面を大幅に見直しました。

あとは、設定ファイルの書き方をrailsの慣習に近づけて、前のバージョンと変えた感じ。

これから暫くはテストでも読み込みの速度面を特に強化していって、rspecの代わりに使えるように頑張っていこうかと思っています。

Published on 05/14/2016 at 14:00 under .

railsのjpmobileをガラホに対応させるためのgemを作ったよ!!

ちょっと夏発売のガラホの事を調べる機会があったので、とりあえず現行のガラホをjpmobileで簡単に識別できるgemを作ってみました。

request.android_feature_phone?

の様な感じで、jpmobileを拡張する形でメソッドを定義したので、ガラホであればコントローラーでviewのファイルを切り替えるとか、viewの内側で読み込むcssを切り替えるとかすればいいのではないでしょうか?

ガラホって、地味に対応の工数がかかる闇端末の香りがする・・・。対応サイト増えるのかなぁ・・・。

 

Published on 06/22/2015 at 13:43 under , .

rails管理画面:typusメモ

紹介

railsのシステム管理画面作成サポートで使われているgemとして有名なのは次の3つ

その中で、私が一番しっくり来て使い慣れている、typusの解説でもメモ代わりに残しておきます
typusの一番の利点は、その拡張性の高さです
rails_adminやactive adomin触ってみたのですが、最初の段階では格好良く見えるのですが
その後使い込んで行くと、だんだんと拡張性の限界が出てくるものです
最初は開発者がちょっとテストデータを作成するために使っていたものが
その後運用フェーズで開発者以外にも利用されるようになってしまった時に
今ある状態から自然な形で段階を踏んで拡張をしていくための、カスタマイズのための仕掛けがよく出来ているのです

実際には、typusの場合は、view、helper関数、コントローラーのいずれの機能も、内部で関数ごとに良く機能分割されていて
そのうえで、gemの機能をオーバーライド出来る様に設計されているので
一部の機能だけを上書きして変更しやすい、そのため管理画面を”実運用レベルまで”に持って行けるのが強みです
rails_adminやactive_adminの場合、編集結果を反映するのに、再起動が必要だったり
カスタマイズのためのファイルが一つだけなので、複雑なカスタマイズを行おうとすると、ものすごくそのファイルが長くなったりするのですが
それが無いのが強みですね

逆に欠点というと、実際にviewがレンダリングされる迄にviewもhelper関数をミルフィーユの様に重ね重ね通過して行くので
実際にどこを編集すれば望みの箇所をカスタマイズ可能かという事に関しては、コードを時間をかけて
手繰って行く努力が必要になります
場合によっては、全部自分で書いてしまった場合が早い場合もあります
(経験値が溜まると、だんだん逆になって行きます)
個人的には、ピンポイントで編集して、最小の編集で済ませようとするよりも
最初は学習コストに見合わないと感じたら、viewごととか丸ごと機能をオーバーライドして
自分で、分かる様に作って行けば良いと思っています

インストール方法

そのたりは公式のドキュメント以外にも色々あるので今回は省略
これとかおすすめでしょうか…

rails 管理画面を簡単に作ってくれるtypusをやってみた

日本語化の方法

まずは日本語設定ファイルをシステムに適応してしまいます

日本語設定ファイルの適応

私のgithubに日本語設定のyamlファイルが置かれていますので

git cloneとかして持ってきて下さい
https://github.com/baban/typus_lang

使い方はそちらのページに書かれていますが
railsの所定の箇所に、とってきたファイルにある、日本語設定周りのファイルを設置するだけです

viewファイルの日本語化

現在の状態だと、メニュー等の日本語化がされてもまだ表示されている名前が
「管理者s」等の、複数形のsがよけいにくっついた状態になってしますのでこれを直してしまいます
typysのgemから、以下のファイルをすべて持ってきて
railsのプロジェクトの対応する箇所にコピーします
その後

grep plualize -r app


でplualize メソッドを呼んでいる箇所を全て探してきて
そこのplualize メソッドを取り除いて行きます

  • app/views/admin/resources/index.html.erb

  • app/views/helpers/admin/resources/_sidebar.html.erb

  • app/views/admin/dashboard/widgets/_applications.html.erb

  • app/views/admin/dashboard/widgets/_models.html.erb

  • app/views/admin/dashboard/widgets/_models_extended.html.erb

  • app/views/admin/templates/_belongs_to.html.erb

  • app/views/helpers/admin/resources/_sidebar.html.erb

複数形処理のハードコーディングですが
このあたり、非ラテン語文化圏を意識されていないのかな…と少し悲しくなりますが
現実問題として、activesupportやらのrailsの機能を拝借する感じでは
限界を感じてもいます
とりあえず、上記のカ所だけ対処すれば
概ね目立つ所は対処が終わっているのでこれでよしです

このあたりまでやっておけはインストール直後に出てくる違和感は消えていると思います
他にもカスタマイズのコツに関しては多々あるのですが、そのあたりに関しては記事を分けさせていただきましょう

Published on 08/21/2014 at 06:11 under .

githubでrubyの有名なプロジェクトのバージョン命名記法を調べてみた

久しぶりにgemの開発を行っていたときに、ふと他の人のgemのブランチ管理方法はどうしていたのかが気になったので

調べてみました

gem 名前の管理方法
rake 0.9.2などのドット区切りのバージョン名
rails 3-2-stable
rdoc 3.9などのドット区切りのバージョン名
factory_girl 3.2.x
rspec 3-0-stable
coffeescript 特になし、新機能名=ブランチ名
 
pry 特になし、新機能名=ブランチ名

device
v1.1
typus 3-0-stableなど、railsと同じ
compass 特になし、新機能名=ブランチ名
 
結論:
 
コレといってブランチの切り方に関して規則はない
 
強いて言うならrailsの規約に沿って
「バージョン名+安定版かどうか」で名づけるパターンになっていました
 

Published on 06/29/2014 at 13:46 under .

Skyscraperのサイト構築手順書

一応現行のリンク集のプログラム自体の作成方法をとりまとめたので

プログラムと一緒に、現状値段と性能的に一番妥当そうなクラウドの、さくらクラウドでの構築手順書を公開させていただきます

CentOSのサーバーに、Ruby on Railsを普通につっこむだけの簡単手順なので

一般的なUnixサーバーの構築スキルがあれば誰も困らない構成でしょう

あとは、Herokuとかでの構築実験をしてこれも公開できればなぁと思っています

https://github.com/baban/digital_root_hub/wiki/さくらクラウド上にシステムを構築する手順

一応界隈の文化というのは、受け継がれていくこととその歴史を大事にする世界なので、今後うちのサイトに何かあったときのための非常線ですね、ちなみに管理画面からはサイトの一覧をCSVで吐き出せるので、定期的にコードの内側に最新のリストを織り込んで更新していく予定です

ホント全く作り込みもないので恥ずかしいものなんですが、あとは作者名検索とサイト名検索、UIの若干の改善くらいはやっておこうかと

 

Published on 10/15/2013 at 15:27 under , , , .

メモ:自分のrails構築手順書

環境は

CentOS release 5.8 (Final)

selinuxとFirewallのオフで行なっています


OSのアップデート


yum -y update


現在の環境のチェック


cat /etc/redhat-release
#CentOS release 5.8 (Final)
/usr/sbin/httpd -v
# /usr/sbin/httpd -v
mysql --version
# mysql  Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (i686) using readline 5.1
php -v
# Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

ユーザーの作成


rootでログイン


adduser rails_user
passwd rails_user

visudoで設定ファイルを開いて、92行目のコメントアウトを外す


visudo

## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL

vi /etc/group

11行目のグループ設定に自分のユーザー名前を追加


wheel:x:10:root,rails_user

いらないサービスを停止


chkconfig atd off
chkconfig bluetooth off
chkconfig cpuspeed off
chkconfig cups off
chkconfig smartd off
yum -y remove cpuspeed smartd bluetooth

ここから外部のrpm のとり込み設定

yum環境を構築

pwd # /rootにいるか確認
mkdir rpm
cd rpm/

Dagリポジトリ追加


wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
rpm --import RPM-GPG-KEY.dag.txt
vi /etc/yum.repos.d/dag.repo

設定ファイルに以下の記述をコピー


[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el5/en/$basearch/dag/
gpgcheck=1
enabled=0

コンパイル環境準備


yum groupinstall -y "Development Tools"
yum -y install httpd php php-mbstring php-mysql php-pear
yum -y install gcc zlib-devel rpm-build  openssl-devel readline-devel
wget http://pkgs.repoforge.org/checkinstall/checkinstall-1.6.0-3.el5.rf.i386.rpm
rpm -Uvh checkinstall-1.6.0-3.el5.rf.i386.rpm
# wget  http://asic-linux.com.mx/~izto/checkinstall/files/rpm/checkinstall-1.6.1-1.i386.rpm



git導入


yum --enablerepo=dag,rpmforge install -y git subversion

apache,mysql,memcached導入


yum install -y mysql mysql-server mysql-devel
yum install -y curl-devel httpd-devel
yum install -y memcached
yum install --enablerepo=dag libyaml libyaml-devel
yum install -y redaline
yum  -y install redis
chkconfig --level 235 mysqld on
chkconfig --level 235 httpd on
chkconfig --level 235 memcached on
service mysqld start
service httpd start
service memcached start

zshのインストール


通常zshは必須では無いのですが、今回はこだわりでいれることにします

ちなみにあとでrvmを入れるとき、これを前提にしているのでパスできない必須の作業です


yum install -y curses-devel ncurses curses cdk-devel ncurses ncurses-devel
yum install -y zsh
wget http://sourceforge.net/projects/zsh/files/zsh-dev/4.3.17/zsh-4.3.17.tar.gz/download
tar xvzf zsh-4.3.17.tar.gz
cd zsh-4.3.17
./configure --enable-multibyte --enable-locale
make
checkinstall --exclude=/selinux

checkinstallのビルドが始まりますが

正直入力すべき箇所は3箇所であとは全部Enterを教えていれば大丈夫です


The package documentation directory ./doc-pak does not exist. 
Should I create a default set of package docs?  [y]: y

Please choose the packaging method you want to use.
Slackware [S], RPM [R] or Debian [D]? R

Please write a description for the package.
End your description with an empty line or EOF.
>> zsh-4.3.17

ログがだ~っと流れてrpmのパッケージができるので暫く待つ


rpmパッケージの作成が完了したらインストールを行う


rpm -ivh /usr/src/redhat/RPMS/i386/zsh-4.3.17-1.i386.rpm 
chsh -s /usr/local/bin/zsh rails_user

rvmのインストール

rvmのインストールはrootではなく新規作成したrails向けのユーザーに行う


su rails_user
cd ~/

rvm、ruby、railsのインストール


bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

.zshrcで


vi .zshrc
# 以下の行を追記
#  -s "$HOME/.rvm/scripts/rvm"  && . "$HOME/.rvm/scripts/rvm" # Load RVM function
source .zshrc

rvm --version
# rvm 1.13.6 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
rvm install 1.9.2
rvm use 1.9.2 --default
ruby -v
# ruby 1.9.2p320 (2012-04-20 revision 35421) [i686-linux]
gem --version
gem install rails --version 3.2.2

Railsの作業ディレクトリを作成

sudo mkdir /var/www/htdocs
sudo chmod 777 /var/www/htdocs
cd /var/www/htdocs 

Railsのプロジェクトを作成


sudo yum install -y sqlite sqlite-devel
rails new test_app
cd test_app
vi Gemfile
# 18行目をコメントアウトを外す
gem 'therubyracer'

データベースの接続設定に次のように設定

bundle install
rails server

これで無事に動けば設定完了


ImageMagick導入


画像のアップロード&拡大、縮小を行う必要があるのでImageMagickを導入します


yum install -y ImageMagick ImageMagick-devel

passengerの導入

本番環境を意識して設定ファイルを合わせます


gem install passenger --version 3.0.12
passenger-install-apache2-module
sudo ln -s /var/www/htdocs/ras_vn/resource/rails.conf /etc/httpd/conf.d/rails.conf
sudo /sbin/service httpd restart

これでmogrelに依存しなくてもapacheでrailsを管理してくれます

ポートの指定なしでも80版ポートで表示確認できます

 

samba

unixのファイルを操作しやすくするためにsambaを使えるようにしておきます


chkconfig --level 235 smb on
service smb start

その他


 yum -y install sysstat

不要なファイルを削除


yum remove -y openoffice*
yum remove -y gimp*

mecabの導入


形態素解析をできるようにmecabをインストールしておきます


wget http://mecab.googlecode.com/files/mecab-0.98.tar.gz
cd ./mecab-0.98
make
make check
./configure --enable-utf8-only
make install

wget http://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
tar xvzf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure --with-mecab-config=/usr/local/bin/mecab-config
make
make install

mongoDBの導入


mododbの存在するリポジトリを追加


vi /etc/yum.repos.d/tengen.repo


[10gen]
name=10gen Repository
baseurl=http://downloads.mongodb.org/distros/centos/5.4/os/$basearch/
gpgcheck=0
enabled=1

mongoDBを導入


yum install -y mongo-stable  mongo-stable-server mongo-stable-debuginfo

サーバーを起動


chkconfig --level 235 mongod on
service mongod start



 

Published on 10/08/2013 at 14:19 under , .

管理画面作成ツール:typusの日本語翻訳設定ファイルを置いておきますよっと

railsの管理画面生成三大ツールの一つ、typusですが日本語設定ファイルが無いので、自分で作ってgithubに上げさせていただきました

完成度が上がったら本体にpull resuestする予定ですが、まだ少しおそれおおいのでここで紹介

いくつかですが、翻訳のかけていない箇所もありますので、どこで使われているか見つけた方などは、そこを埋めて返してくださると幸いです

https://github.com/baban/typus_lang

 

Published on 10/01/2013 at 15:54 under , .