まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

いつもの CentOS ネタです。

CentOS や RHEL(RedHat Enterprise Linux) を GUI 化してデスクトップ環境として使っています。アプリも揃っていて大抵の用途で使える(自分の利用範囲で今のところ使えないのは iTunes と LINE くらい)ので便利なのですが、ちょっとだけ不便を感じるのがウェブブラウザでした。

CentOS では yum で FireFox を導入して使うことはできます(説明いらないと思うけど #yum -y install firefox です)。まあ通常用途であれば FireFox でダメってことはないのですが、ウェブ開発やそのデバッグをする場合、慣れもあって Chrome を使いたくなります。

しかし、残念ながら現在 Chrome は CentOS 向けには(公式には)提供されていないのでした:
Google Says Red Hat Enterprise Linux 6 Is Obsolete [Updated]


ただ諦めるのは少し早いです。有志を中心に対策が練られていて、大きく以下の2つの方法で CentOS に Chrome 環境を導入することが可能です:
(1) 有志で用意されたインストーラを使って Chrome を導入する
(2) Chromium ブラウザをインストールする


(1) は CentOS には提供されていないものの、Fedora 向けに提供されている(た?)Chrome を元に、必要な前提ライブラリなどと一緒に導入するインストーラを、Richard Lloyd 氏が有志で開発してくれました。その方法を使うケースです。こちらの方法についてはリンク先を参照してください:
http://www.tecmint.com/install-google-chrome-on-redhat-centos-fedora-linux/

※上記リンク先の説明が少しわかりにくいと思うので補足。Step 2 の Update と書かれた中に "Richard Lloyd" さんの名前が書かれたその下からが、Chrome 導入方法の紹介になります。

(2) は厳密には Chrome ブラウザではないのですが、Chrome のベースとなっているオープンソースプロジェクト Chromium を CentOS にインストールして使う、というケースです。まあほとんど Chrome と同じと言えるし、ある意味で Chrome よりも一歩進んだ、開発最先端の機能を取り入れているとも言えるし、開発者ならこっちを使ってみるのも悪くないですよね。


というわけで、以下 CentOS に Chromium ブラウザを導入する手順の紹介です。CentOS6 前提で進めます。

まず root になって、その後で Chromium の yum レポジトリファイルをダウンロードします:
# cd /etc/yum.repos.d
# wget http://people.centos.org/hughesjr/chromium/6/chromium-el6.repo

で、yum を使って chromium をインストールします。途中何か聞かれたら YES で先に進めます:
yum install chromium

これだけ。yum が必要な前提ライブラリごと Chromium をインストールしてくれます。導入が終わるとメニューから Chromium が実行できるようになっているはずです。
2014013101


以上、Chrome や Chromium の導入方法についての紹介終わりです。以下はこれら2つに共通する、実行時の Tips についての補足です。

Chrome/Chromium のインストールはできました、実行時にはちと問題が生じます。一般ユーザーで Chromium や Chrome を実行するのは問題ないのですが、root ユーザーで Chromium(Chrome) を実行しようとすると何故かエラーメッセージが表示されてしまうのでした:
2014013102

これを回避するには特殊なパラメータを付けて Chromium を起動する必要があります。そのためにはメニュー選択時の実行コマンドを編集する必要があるのでした。

ではそのための手順も紹介します。まずはメニュー編集用の alacarte という GUI アプリケーションを yum でインストールしておきます:
yum -y install alacarte

インストール後に alacarte を実行します:
alacarte &

alacarte が起動します:
2014013103


Chrome/Chromium は「インターネット」カテゴリの中にあるので、左ペインで「インターネット」を選択し、右画面の「Chromium ウェブ・ブラウザ」と書かれた箇所を右クリックして「プロパティ」を選択します:
2014013104


プロパティの「コマンド」欄を書き換えます。具体的には最初から記述されている内容はそのままに、 %U に続けて -user-data-dir=$HOME/.config/google-chrome を追加します。"%U" と "-user-data.." との間に1つスペースを入れることを忘れずに:
2014013105

これでメニューの変更ができました。「閉じる」で alacarte を終了し、再度メニューから Chromium を実行すると、今度は正しく起動するはずです:
2014013106


Chromium からも Google Chrome ストアが使えそうです。豊富な Chrome プラグインが使えるのはやはり魅力的です。


 

Linux のコマンドラインで cp といえば「ファイルコピー」コマンドです。

# cp a.txt b.txt

とやれば「a.txt というファイルを b.txt という名前でコピー」です。簡単ですよね。

この cp コマンドには便利なオプションが数多くあります。例えば、
# cp -r /home/a /tmp

で /home/a というディレクトリをまるごと /tmp に(/tmp/a というディレクトリを作って)コピーする、という命令になる、とかです。

この cp コマンドは賢いので、コピー先に同じ名前のファイルがあると、新しいファイルで上書きするかどうかを確認してくれます:
# cp a.txt b.txt
cp: `b.txt' を上書きしてもよろしいですか(yes/no)?


ここで y(es) を押すと上書きコピー、n(o) を押すと上書きしません。

さて、 ディレクトリまるごとコピーした後に、コピー元のディレクトリの一部に変更が加わったとします。ファイルそのものが更新されたとか、新しいファイルが追加されたとか。 で、その変更をコピー先にも反映させようとして、もう一度ディレクトリまるごとコピーを試みるとこんな感じになります:
# cp -r /home/a /tmp
cp: `a.txt' を上書きしてもよろしいですか(yes/no)? y
cp: `b.txt' を上書きしてもよろしいですか(yes/no)? n
cp: `c.txt' を上書きしてもよろしいですか(yes/no)? y
  :

新しく追加されたファイルは無条件にコピーされるのですが、それ以外の(既に存在する)ファイルは上書き扱いになるので、1つ1つ確認メッセージが表示されます。で、上記例では最初の a.txt は上書きする、次の b.txt は上書きしない、次の c.txt は上書きする、・・・といちいちコマンドを入力してコピーするかどうかを指示しています。

現実的には変更の加わったファイルは上書きしてほしいし、変更されていないファイルについても(処理としては無駄になりますが)上書きしても結果的にファイル内容は変わらないので、「全て無条件に上書きしても構わない」というケースも少なくないと思います。でもその場合でも y とリターンキーを連打することになって、ちょっと面倒です。


もちろんそんなことは想定済みで、cp コマンドには「コピー先に同名のファイルがあった場合に強制上書きする」というオプション -f があります。
# cp --help
:
:
-f, --force if an existing destination file cannot be opened, remove it and try again.
でも実際にやってみるとうまくいかないケースが多いです。
# cp -f a.txt b.txt
cp: `b.txt' を上書きしてもよろしいですか(yes/no)?
これはシステムの設定で cp にエイリアスが指定されていることが原因として考えられます。僕の CentOS 環境では特に何もエイリアスを指定したつもりがなくてもこのようなエイリアスが(デフォルトで)設定されているようでした。
# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
  :

cp は知らないうちに 'cp -i' という命令になっていました。この -i オプションは強制インタラクティブの指定で、いわば -f の逆の動作(常に上書きを確認する)を指定するオプションです。
# cp --help
:
:
-i, --interactive prompt before overwrite (overrides a previous -n option)

なので、このエイリアスを無効にすれば -f オプションが有効になるのですが、デフォルトの設定を変えてしまうのはそれはそれで怖い。。

というわけで、普段は -f を付ける時だけ cp コマンドの頭に \(¥あるいはバックスラッシュ) を付けて実行するようにしています。コマンドの頭に \ を付けると、その時だけエイリアスが無効になります
# \cp -f a.txt b.txt
# (上書きコピー完了)

もちろん -r オプションなどとも一緒に使えるので、これでディレクトリまるごと上書きコピーすることもできるようになります。











 

システムプログラマーとして株式会社クーシーに入社後、半年が経ちました。

まだ毎日が勉強で、知らないことも驚くことも多いし、偉そうに感想を言えるような立場ではないのですが、特に大きく印象に残っている発見はこれです:
「今どきのウェブって、これだけの人がこれだけの作業をしてできているのか」

例えば企業のウェブサイト。中小企業だったりするとサイトの規模そのものは必ずしも大きいわけではないのです。極端な例ですが、1ページだけを作る場合で考えます。

これまでの自分がそのページを作ろうとすると、どちらかというと「やりたいことは技術的に実現できるかどうか」を中心に考えていました。今も自分の担当箇所でいえば技術的にできるかどうか、どのくらいでできそうか、ということが検討内容になりますが、それをどう見せるか、についてはあまり重視していませんでした。まあ「jQuery Mobileとか、Bootstrap とか、適当なフレームワークを適当にカスタマイズして使おう。画像は誰か描いて(苦笑)」程度に考えていた、というレベルです。ぶっちゃけ CSS とか基礎はわかっているつもりだけど自分ではサンプルを作る程度でそれ以上にいじることはほとんどない感じ。悪く言えば見た目は軽視してました。

今の会社では UI や UX を専門に担当するチームがあります。PC 用なのか、スマホ用なのか、レスポンシブデザインにするのかを考慮した上で、画像やグラフなどはピクセルレベルで調整して、必要であれば画像のデザインも行った上で HTML をデザインし、CSS を用意してくれます。僕らはその HTML をテンプレートにして組み込んだり、 CSS はロードして指定するだけ。これにバックエンド処理を加えたり、動的な JavaScript を加えたりしてページを作ります。良くも悪くも分業制を敷いて、それぞれのプロが担当する形です。クーシーの強みは(どちらかを外注するとかではなく)その両方のプロが所属しているところだと思います。

これまでの自分の感覚と比べると、軽視していた半分の作業を専門チームがやってくれている、という感じです。作業は細かいし、さすが質も高いし、そして自分は楽です(その代わり作業人月は増えるけど)。自分があまり注力していなかった分野のプロと接する機会がある、というだけでもすごくいい刺激が得られるし、技術を盗む相手という意味でも頼もしい。そして何よりも自分が担当したサイトやサービスがすごく良さげに見える(笑)。

と、そんな当たり前のことが新鮮な状態から自分にとっても当たり前のように感じつつある今日この頃です。


 

このページのトップヘ