おもこん

おもこんは「思いつくままにコンピュターの話し」の省略形です

Ruby on rails の学び方

Rails(Ruby on rails)は有名なウェブアプリ・フレームワークです。 クックパッドが有名ですが、それ以外にもRails上のウェブサイトを持っている会社はたくさんあると思います。 今回は、Railsを知らない人が、どのように学んでいけば良いのかを解説します。

インストールとはじめに読むべきドキュメント

前提として、パソコンにRubyがインストールされていなければなりません。 その上で、Railsをインストールするには、

$ gem install rails

とします。 インストールしたら、railsが動くか確認しましょう。

$ rails --version
Rails 7.0.3

最初に読むべき文書はRuby on Railsガイドの第1章「Railsをはじめよう」です。 この段階で内容をすべて理解するのは難しいと思いますが、ガイドに沿ってサンプルのブログを自分のPCに打ち込み、動作させてみると全体像がつかめると思います。

次の段階で勧められるドキュメント

railsチュートリアルは、内容が充実して、しかもわかりやすいチュートリアルです。 これを一通り読めば、Railsの基礎は押さえられます。 最新版は有料ですが、第4版が無料で読めるので、それでも良いと思います。 ただし、Railsは活発に開発されていて、第4版のRails5と最新版のRails7では細かいところが変わっているので、お金を払って最新版の「Railsチュートリアル」を入手する選択肢もあります。

Railsを使った開発で常に参照すべきドキュメント

Railsは規模が大きいのですべてを頭の中に入れるのは難しく、効率も悪いです。 細かいことは、必要に応じて次の2つのドキュメントを参照してください。

  • Ruby on Railsガイド日本語版。大本は英語版のRuby on Rails Guides (v7.0.3)です。 これは、必要なトピックを調べるために使います。 例えば、Rails上のアプリケーションをどのようにテストしたらよいかは、Rails テスティングガイドの章を見ます。 また、Railsは「Minitest」というテスト・ライブラリを使っているので、そのウェブサイトも参考になります。
  • Ruby on rails APIはRailsのメソッドなどのドキュメントです。 英語です。 メソッドの定義などをしっかり調べたいときはここを読むしかありません。 左上の検索窓を良く使います。
その他

Railsそのものではありませんが、データベースの知識も必要です。 例えば、Herokuをウェブアプリのサーバで使う場合は、PostgreSQLが指定されたデータベースです。 そこで、PostgreSQLの知識もある程度必要になります。 英語ドキュメントはPostgreSQLのウェブサイトに、またその日本語訳は日本PostgreSQLユーザ会のウェブサイトにあります。 Herokuを使う場合は、Heroku自体の知識も必要になりますが、ウェブサイトに丁寧な説明(英語)があります。

ここでは書店で販売されている本については書きませんでした。 私自身は、本を買うことがほとんどありません。 対象のソフトウェアのウェブサイトに無料で最新のドキュメントがあるからです。 ですが、本の方が分かりやすいという人もいると思いますので、チュートリアル(サンプルプログラムを解説するタイプの本)を選ぶと良いでしょう。

Bose QuietComfort Earbuds

電車に乗っていると、沢山の人がイヤホンで音楽を聞いていることに気がつきます。人生の多くの時間を音楽で過ごしている現状を考えると、イヤホンは良いものを手にしたいですね。私のおすすめはあの有名音響メーカーBoseの「Bose QuietComfort Earbuds」です。定価33,000円のところ、今日のAmazonでは27,500円で販売されていました。高いと思うかもしれませんが、毎日のように使うのならば、1日あたりの単価は安くなりますから、さほどではないと思います。

このイヤホンの良いところは、その名前の通り「Quiet」(静けさ=外界の雑音のカット)と「Comfort」(心地よさ=高音質)です。

  • 電車で聞くなら雑音のカットが必須。試せばわかります、この製品の優秀さが。
  • 自宅でゆったりと音楽を聴くときも、音質の良さに癒やされます。

私がこれを買ったのは昨年の10月。9ヶ月使っての実感です。ちなみに、私の好きなミュージシャンはJacob Kollerさんです。Youtube channelはこちら。

豆知識、デフォルトとデフォルト

今日も英語ネタです。 私は NHKラジオの「ニュースで学ぶ現代英語」を聞いていますが、今日の番組で取り上げられたのがデフォルトという言葉でした。 講座で取り上げたニュースは、ロシア国債の債務不履行(デフォルト)に関するものでした。 「デフォルト」は、債務を払わない、あるいは払えないという意味です。

コンピュータでも「デフォルト」という言葉は良く使われます。 設定の初期値のことです。 この2つのデフォルトは違うものだと思っていましたが、実は同じ意味から派生した使われ方だと、伊藤サム先生がおっしゃっていました。

デフォルト(default)をdeとfaultの2つの部分に分かれます。接頭辞de-は強意を表し、faultは「完全さをそこねる、本質的な欠落、不足」がもともとの意味で、fail to (〜しようとして)できない、と語源的には同じなのだそうです。 このことから、defaultは「何かをできない、しない」というのが元の意味になります。

  • 金融用語のデフォルト=>債務を返すことが「できない」
  • コンピュータのデフォルト=>ユーザが設定をカスタマイズ「しない」=>初期設定のままになる

となります。

ということで、金融用語のデフォルトとコンピューター用語のデフォルトが今日初めて繋がりました。 以上は「ニュースで学ぶ現代英語」の受け売りです。 伊藤サム先生、勉強になりました。 ありがとうございました。

プログラマーと英語

今日はプログラマーにとって英語が必要かどうか、必要ならばどのようにして英語を身につけるかということについて書きたいと思います。

もしもあなたの仕事が日本語だけで十分なら英語は要りません。 しかし、インターネット上の最新の技術を使おうとすると英語は必須です。 なぜなら 最新の技術についてのドキュメントはほとんど英語で書かれているからです。

CSSのフレームワークのBootstrapを例に取りましょう。 Bootstrapの日本語の解説本や解説サイトもたくさんあると思います。 しかし、それらの情報はその本やサイトが書かれた時点のものです。 Bootstrapは開発が盛んで、しかも古いバージョンとの互換性が必ずしもありません。 したがって、最新バージョンのドキュメントはbootstrapの本家ウェブサイトの英語情報だけになってしまうのです。 このような事情が「英語必須」の一番の理由です。

では英語にどうやって対処するのか。 最も手っ取り早いのはGoogle翻訳です。 ドキュメントはきちんとした英語で書かれているので、Google翻訳でほぼ正しく翻訳することが出来ます。 Google翻訳は逆の使い方も出来ます。 自分が書いた英語のドキュメントやメールをGoogle翻訳に日本語にさせて、おかしなところがないかチェックをすることができます。 日本語がおかしければ、間違った英語を書いてしまった可能性が高いです。

あなたが外国のプログラマーとあるいは会社とメールでやり取りをする場合は、Google翻訳だけでは難しいです。 また、インターネットの会議に参加する場合はもっと英語力が必要です。 では、どうやって英語力を上げるか。 手段は無限ですが、私の良いと思う方法を3つあげてみます。

  • NHKのラジオ講座。英語の講座は初心者から上級者まで様々なレベルの講座が提供されています。しかも、「らじるらじる」アプリを使うと放送後1週間は、いつでも聞くことが出来ます。
  • YouTube。私が見て良いと思ったのはHapa英会話です。 このチャンネルの講師はジュンさんというアメリカと日本のハーフの方です。 彼はインターネットを使った英語の教室を仕事としているので、YouTubeも英語の話に特化されています。 それから、アーサーさんのUI-Connectも良いと思います。 これらは日本語で解説されているので、視聴者の英語レベルに関係なく分かりやすいです。 英語による英語の講座としては、イギリス英語ですがEnglish Jadeがあります。 残念ながら最近は投稿されていませんが、過去のビデオだけでも十分な量があります。 Youtubeは体系的な講座ではありませんので、メインの勉強法ではなくサブ的な使い方になります。
  • 英会話教室。この最大の利点は対面で英会話ができるということです。ただしお金がかかるのが欠点です。安くても月あたり数千円はかかります。

文法を強化したい人には「English Grammar in Use」がおすすめです。 アマゾンで購入できます。

英語学習のモチベーションを上げるには、資格試験を受けるのも良いです。 私はTOEIC、CASEC、GTECの3つを受けたことがあります。 TOEICは会場受験でした。 リスニングとリーディングを受けましたが、一般的な試験だと思います。 CASECとGTEC(2科目)はインターネットで受験でき、すぐに結果も知ることが出来ます。 GTECは難しい印象がありましたが、不思議なことに、結果は一番良かったです。 これらの資格はいろいろな場面で使えるので活用すると良いでしょう。

英語ができるようになれば、Githubなどで世界の開発者とつながることができます。 短期間に習得することは難しく、時間がかかりますが、がんばりましょう。

RMagickについて

RMagickは、ImagemagickをRubyで使うためのgemです。 gemとは、Rubyのライブラリのことです。

インストール

他のgemと同じように、gemコマンドでインストールします。

$ gem install rmagick

使い方

LinuxのコマンドラインからImagemagickを使うのとは異なります。 RMagickは、Rubyのプログラムにrequireで取り込みMagickモジュールをincludeして使います。 プログラム中では、RubyのクラスであるImageまたはImageListクラスのインスタンスを作成し、インスタンスメソッドをコールして使います。 sample.jpgを読み込んでディスプレイに表示するには次のようにします。

require 'rmagick'
include Magick

i = ImageList.new('sample.jpg')
i.display

以下では、requireとincludeコマンドは、プログラムリストから省略します。

ImageとImageList

画像データはImageオブジェクトとして扱われます。 画像ファイルsample.jpgをImageインスタンスに取り込むには、readクラス・メソッドを使います。

a = Image.read('sample.jpg')
i = a[0]
i.display

画像ファイルには複数のフレームが含まれることがあります。 例えば、アニメーションgifは複数の画像を順次表示することによりアニメーションを実現しています。 そのような画像に対応するため、readメソッドは各フレームをImageインスタンスにし、その配列を返します。 したがって、Image.read('sample.jpg')では1枚の画像(フレーム)からなる配列を返すので、Imageインスタンスを取得するには「i=a[0]」とする必要があります。

ImageListインスタンスはImageインスタンスのリストです。 「リスト」は「配列」のようなものだと考えて構いません。 ImageListには「現在のImage」というのがあり、Imageに対するメソッドを受け取った場合には「現在のImageインスタンス」をレシーバとしてメソッドを実行します。 ImageListに画像ファイルを読み込むには、newクラスメソッドを使います。

以上のことから、ImageListクラスを使うのとImageクラスを使うのに大きな差はありませんが、どちらかというとImageListの方が使いやすいと思います。 次の項目からは、RMagickの3つの使用例を紹介します。

画像形式の変更

JpegからPngに画像形式を変更します。

i = ImageList.new('sample.jpg')
i.write('sample.png')

リサイズ

sample.jpgの画像サイズを240x180に収まるように変更してsmall.jpgとして書き出します。 元の画像の縦横比が240:180=4:3でない場合は、余白が生じますが、その余白は生成された画像に含まれません。 例えば、480x300の元画像をresize_to_fitすると、240x150の画像になります。

i = ImageList.new('sample.jpg')
i = i.resize_to_fit(240,180)
i.write('small.jpg')

画像の重ね合わせ

sample.jpgの上にoverlay.jpgを被せます。 できあがる画像サイズはsample.jpgと同じで、もしoverlay.jpgがそこからはみ出る場合はカットされます。 このような重ね合わせのときの動作は、composte operatorで指定でき、AtopComposteOpはそのひとつです。 Gravityは被せる画像の位置をしていするもので、CenterGravityは中央に配置します。

i = ImageList.new('sample.jpg')
j = ImageList.new('overlay.jpg')
i = i.composite(j, CenterGravity, AtopCompositeOp)
i.write('composite.jpg')

ドキュメント

インターネット上にRMagickのドキュメントがあります。 もしもドキュメントをダウンロードしたい場合は、RMagickのソースをダウンロードします。 そして、doc/index.htmlをブラウザで開けばドキュメントを見ることができます。 また、モジュール、クラス、メソッド全体については、RDocで生成されたドキュメントがあります。

Imagemagick version 7 について

Imagemagickはコマンドラインから画像処理をするアプリケーションである。 ここでは4つの例を用いてImagemagick(バージョン7)を紹介したい。

  • 画像情報を得る
  • 画像の形式を変更する
  • リサイズする
  • 画像を重ねる

画像情報を得る

画像ファイルsample.jpgの情報を得るには「magick identify sample.jpg」と入力する。

$ magick identify sample.jpg
sample.jpg JPEG 320x240 320x240+0+0 8-bit sRGB 39567B 0.000u 0:00.002

バージョン7ではコマンド名は「magick」である。 バージョン6までの「identify」「convert」などのコマンドはバージョン7では使えない。 その代わりとして、バージョン7にはサブコマンドがあり、バージョン6の「identify」とバージョン7の「magick identify」は同じ機能を表す。

出力行から画像サイズが320x240であることなどが分かる。 詳細はImagemagickのウェブサイトを参照してほしい。

画像の形式を変更する

Jpeg画像をPng画像に変更することができる。

$ magick sample.jpg sample.png

Jpeg、Pngの他に多くの画像形式がサポートされている。

リサイズする

$ magick sample.jpg -resize 240x180 small.jpg

Resize

sample.jpgとsmall.jpgは同じ写真だが、画像サイズが320x240から240x180に変更された。

画像を重ねる

左上の女の子の画像は、長方形で背景部分が透明になったものである。 その画像をsample.jpgの花の画像に重ねると、女の子は見えるが透明部分は透けて、下の画像が現れる。

Composite

画像を重ねるImagemagickのコマンドは

$ magick composite girl.png -gravity South sample.jpg composite.jpg

である。 gravityオプションは1番めの画像(前景)を2番めの画像(背景)のどこに置くかを指定するものである。 Southでは下辺にあわせるように重ねる。

Imagemagickの利点

Imagemagickとgimpを比べると、前者がコマンド、後者がポインティングデバイス(マウスなど)によって実行される点が違う。 Imagemagickの利点はそのコマンドをプログラムからコントロールできる点である。 最も単純なケースはbashスクリプトでImagemagickを使うことである。 それによって、例えば同一ディレクトリ内のすべての画像に対しリサイズすることができる。

for x in `ls image_directory`; do
  echo "Converting $x ..."
  magick $x -resize 240x180 $x
done

他の言語でも可能である。 次回はrubyとrmagickを使って画像を処理する例について取り上げようと思う。

Imagemagick最新版(ver7)のインストール

Imagemagick最新版のバージョンは7.1.0-37である(2022/6/15現在)。 Ubuntu22.04のImagemagickのバージョンはまだ6である。 最新版のインストールをしてみた。

  • Imagemagickのウェブサイトをブラウザーで開く。
  • メニューバーから「Download」をクリックする。
  • 「Linux Binary Release」の見出し以下の段落にダウンロードパッケージの一覧がある(下の画像参照)
  • versionの列にある、「magick」というパッケージをクリックしてダウンロードする。

ここでダウンロードしたパッケージはAppImage形式である。 Descriptionの列にその説明が書かれているが、ダウンロード後のインストール作業が要らないので便利な形式である。

Imagemagick
Imagemagick

そのまま使えるといっても、いくつか必要な作業がある。 最も重要なのは、AppImage形式はlibfuse.so.2というライブラリを必要とするが、Ubuntu22.04にはそれが入っていないということである。 Ubuntuのlibfuseのバージョンは3で、libfuse.so.2はlibfuseのバージョン2である。 つまり、Ubuntuのバージョンより古いlibfuseが必要なのである。 そのためaptを使って古いlibfuseをインストールする。

$  sudo apt install libfuse2

これで、2つのバージョンのlibfuseが同時に存在することになるが、ライブラリ名が別なので問題は発生しないはずである。

  • ユーザのホームディレクトリに「bin」ディレクトリを作る。
  • ダウンロードした「magick」ファイルをbinディレクトリの下に移動する。(注)
  • magickファイルを右クリックし、「プロパティ」をクリック。アクセス権タブの「プログラムとして実行可能」にチェックを入れる。
  • bashを再起動、または一旦ログアウトして再ログインが必要な場合がある。

(注)この方法ではインストールしたユーザのみが実行できる。 他のユーザも実行できるようにするには、/usr/local/binにimagemagickファイルを移動する。 そのときにはroot権限が必要である。

端末を起動してImagemagickを呼び出してみる。

$ magick --version
Version: ImageMagick 7.1.0-37 Q16-HDRI x86_64 b65d0d9af:20220605 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP(4.5) 
Delegates (built-in): bzlib djvu fontconfig freetype jbig jng jpeg lcms lqr lzma openexr png raqm tiff webp x xml zlib
Compiler: gcc (7.5)

バージョン7ではコマンドが変更されている。 バージョン6までは「convert」などがコマンドだったが、バージョン7ではすべて「magick」 コマンドに統一された。 ウェブサイトでImagemagickを解説しているページは古い記述が多いので注意が必要だ。

Imagemagickの使用例については、次回の投稿で扱う予定である。