footmark

ひよっこエンジニアの足跡

Onsen UIでスマホサイトを作る その2

今回は Onsen UI テーマローラーページ をベースに各ページを作成し、スライドメニューコンポーネントを使ったリンクを貼ってみます。

作成するページ

作成するのは音楽活動のサイトなので、必要なページは

  • トップ
  • お知らせ
  • ライブ日程
  • バイオグラフィ
  • ディスコグラフィ
  • ダウンロード
  • お問い合わせ

といった感じでしょうか。

実際にバイオグラフィページを作成してリンクを貼ってみましょう。

スライドメニューからリンクを貼る

まずはスライドメニューに項目を追加し、リンクを貼ります。

Sliding Menuパターンのソースを表示する

先週の復習になりますが、Onsen UI テーマローラーページ を開き、Patternsタブを選択します。
次にSliding MenuパターンのShow Sourceを選択し、ソースを表示します。

ページを分ける

表示したソースはスライドメニューを表示するページ(メインページ)とスライドメニューページが同一ファイルに書かれています。
もちろん、このままの形式で進めていっても良いのですが、このままでは最終的にファイルがものすごく長くなってしまうので、ページごとに分けます。
複数ページを同一ファイルに書く記述である、<ons-template> タグ以下で分けます。
<ons-template> タグは含まない)

ページ遷移の処理に書き換える

表示したソースではメニュー項目をクリックした時の処理が、ng-click="menu.close()" になっています。
これではメニューを閉じるだけでページ遷移が行われないので、ng-click="menu.setAbovePage('[遷移先ファイル名]', {closeMenu: true})" もしくは、onclick="menu.setAbovePage('biography.html', {closeMenu: true})" に書き換えます。

アイコンを選ぶ

Onsen UIの公式ページにもある通り、Font AwesomeIonicons のアイコンを使うことができます。

Onsen UIは、Font Awesomeの400以上のアイコン、そしてIoniconsの500以上のアイコンを使うことができます。

Onsen UIガイド | Onsen UI

アイコンを使うには <ons-icon icon="[任意のアイコン名]"> に書き換えます。

コード例

上記、

  1. ページを分ける
  2. ページ遷移の処理に書き換える
  3. アイコンを選ぶ

の処理を行ったコードが次です。

index.html(メインページ)
<!doctype html>
<html>
    <head>
        <link rel="stylesheet" href="bower_components/onsenui/build/css/onsenui.css">
        <link rel="stylesheet" href="styles/onsen-css-components.min.css">
        <link rel="stylesheet" href="styles/sliding_menu.css">

        <script src="bower_components/onsenui/build/js/angular/angular.js"></script>
        <script src="bower_components/onsenui/build/js/onsenui.js"></script>
        <script>
            ons.bootstrap();
        </script>

    </head>
    <body>

        <ons-sliding-menu main-page="top.html" menu-page="menu.html" max-slide-distance="260px" type="push" var="menu">
        </ons-sliding-menu>

    </body>
</html>
menu.html(メニューページ)
<!doctype html>
<ons-page modifier="menu-page">
    <ons-toolbar modifier="transparent">
        <div class="right">
            <ons-toolbar-button class="menu-close" ng-click="menu.close()">
                </ons-icon>Close
            </ons-toolbar-button>
        </div>
    </ons-toolbar>

    <ons-list class="menu-list">
        <ons-list-item class="menu-item" onclick="menu.setAbovePage('top.html', {closeMenu: true})">
            <ons-icon icon="ion-home"></ons-icon>
            Top
        </ons-list-item>

        <br />

        <ons-list-item class="menu-item" onclick="menu.setAbovePage('information.html', {closeMenu: true})">
            <ons-icon icon="ion-information"></ons-icon>
            Infomation
        </ons-list-item>

        <ons-list-item class="menu-item" onclick="menu.setAbovePage('live.html', {closeMenu: true})">
            <ons-icon icon="ion-mic-c"></ons-icon>
            Live
        </ons-list-item>

        <ons-list-item class="menu-item" onclick="menu.setAbovePage('biography.html', {closeMenu: true})">
            <ons-icon icon="ion-person"></ons-icon>
            Biography
        </ons-list-item>

        <ons-list-item class="menu-item" onclick="menu.setAbovePage('discography.html', {closeMenu: true})">
            <ons-icon icon="ion-music-note"></ons-icon>
            Discography
        </ons-list-item>

        <ons-list-item class="menu-item" onclick="menu.setAbovePage('download.html', {closeMenu: true})">
            <ons-icon icon="ion-cloud"></ons-icon>
            Download
        </ons-list-item>

        <ons-list-item class="menu-item" onclick="menu.setAbovePage('contact.html', {closeMenu: true})">
            <ons-icon icon="ion-paper-airplane"></ons-icon>
            Contact
        </ons-list-item>

    </ons-list>
</ons-page>
スクリーンショット

f:id:yuk4420:20141026205538p:plain

バイオグラフィページを作る

スライドメニューを作ったので、リンク先となるバイオグラフィページを作ります。

バイオグラフィページに使うパターンを選ぶ

再度、Onsen UI テーマローラーページ を開き、Patternsタブを選択します。
この中からバイオグラフィページに使えそうなパターンがあれば、それがそのままテンプレートとして使えるわけです。

名前からしてまんまですが、Profileパターンが使えそうですね。
早速Show Sourceを選択してソースを表示します。

コードをコピーし編集する

メニューページと同じように biography.html というファイルを作って <ons-template> タグ以下を貼り付けます。

ただし、この方法だと index.html からではなく biography.html に直接アクセスした際、Onsen UI等々が読み込まれないので、index.html は検索エンジンのクロールを許可しないよう設定したり、 <head> タグ周りもきちんと記述したりといった工夫が必要かと思います。

コード例

biography.html(プロフィールページ)
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">

        <link rel="stylesheet" href="styles/profile.css">

    </head>
    <body>

        <ons-page>
            <ons-toolbar>
                <div class="left">
                    <ons-toolbar-button ng-click="ons.slidingMenu.toggle()">
                        <ons-icon icon="ion-navicon" size="28px" fixed-width="false"></ons-icon>
                    </ons-toolbar-button>
                </div>
                <div class="center">Biography</div>
            </ons-toolbar>

            <div class="profile-card">

                <img src="img/yuk.jpg" class="profile-image">
                <div class="profile-name">ユキミネ</div>
                <div class="profile-desc">Vocal, Guitar, Bass, Cajon, Programming</div>

            </div>

            <ons-list modifier="inset" style="margin-top: 10px">
                <ons-list-item>
                    Twitter
                </ons-list-item>

                <ons-list-item>
                    Instagram
                </ons-list-item>
                
            </ons-list>

            <br>


        </ons-page>

    </body>
</html>

スクリーンショット

f:id:yuk4420:20141026205548p:plain

まとめ

といった感じでOnsen UIを使うとスマホスマホしたサイトが簡単に作成できます。
「Onsen UIでこんなことした!」というのがあればまた紹介したいと思います。

P.S.

いわゆるテンプレートサイトって今どんなのになってるんですかね。
サイトを簡単に作れるサービスなんかがあってテンプレート配布サイトとかはもうないとか?

Onsen UIでスマホサイトを作る その1

先週末、左足をガラスで切ったり、右足を深爪にしたり、さらに偏頭痛がきたりと今月の不幸を使い切った感のあるユキミネです。

唐突ですが、スマホサイトを作ってみようと思います。

経緯

冬にソロで音楽活動をやりたいのでそのサイトを作ろう!

PCサイトならバンドで作ったやつ使い回せばいいけど、今時みんなスマホで見るよなあ

スマホサイトの勉強すっか!

下調べ

今時の(ミュージシャンの)スマホサイトってどんなの?ってことで下調べ。
(2014年10月20日現在)

アーティスト名 カラム数 スライドメニュー タブバー 遅延読み込み 備考
チャットモンチー 1 なし なし あり
ASIAN KUNG-FU GENERATION 1 なし あり なし
ポルノグラフィティ 1 なし なし なし バナー多め
RADWIMPS 1 なし なし なし 最小構成(?)
ONE OK ROCK 1 あり なし なし
各アーティストリンク

所感

もっと流行りみたいなのがあるのかと思いましたが、結構バラバラですね。(サンプル数が少ないのもあるかもしれませんが。)

カラム数は5サイトとも1つでした。
画面サイズもあるし、1が適当なのでしょう。

スマホらしいコンポーネントを使ったメニューはスライドメニューとタブバーがありました。
使い分けるとすれば、素早くアクセスしたい・頻繁にアクセスするページはタブバーから、それ以外はスライドメニューからといった感じでしょうか。
是非、これらのコンポーネントは取り入れたいですね。

チャットモンチーの遅延読み込みはおもしろいなあと思いました。

Onsen UI

じゃあどうやって作ろうかという話ですが、先月の内定者開発でも使ったOnsen UIが良さそうです!

Onsen UIはシンプルなHTML5モバイルアプリ開発用のライブラリで、フロント力皆無の僕でも分かりやすいです。
今回はWebサイトで使いますが、ハイブリッドアプリの開発なんかもできます。
そのうちやってみたいですね。

インストール方法はいくつかありますが、Webサイトで使うなら、Bowerで入れるか、Onsen UIのサイトからダウンロードしてくるのが簡単だと思います。
僕はBowerで入れました。

ここら辺の手順はOnsen UIのサイトにも書いてあります。

Onsen UI

Onsen UIを使う

Onsen UIのサイトには

があり、非常に分かりやすいドキュメント/ツールになっています。

コンポーネント一覧

いわゆるドキュメントです。

マニュアル

●●がしたい!●●が作りたい!というときに役に立ちます。

例えば

  • 新しいページの表示
  • 一つ前のページに戻る

といった項目があり、非常に分かりやすいです。

テーマローラー

これ、ハンパないです。

CSSコンポーネントタブ、パターンタブの2種類があります。

CSSコンポーネントタブ

コンポーネントが視覚的に表示されます。
コンポーネントを選択すると、実際に動作する(触れる)コンポーネントとコードが表示されます。

パターンタブ

コンポーネントを用いたページ(パターン)一覧が表示されます。
各ページは実際に動作します(触れます)。
各ページ右上の Show Source を選択するとコードが表示されます。

カラースキーマが選べる、編集できる

さらに、CSSコンポーネント、パターンのカラースキーマを編集できます。
編集したカラースキーマはダウンロードして適応できます。

雛形を作ってみた

  1. カラースキーマを選択する
  2. パターンを選択する
  3. カラースキーマ、パターンをダウンロード

で以下のような雛形が作成できます。
あっという間ですね!

f:id:yuk4420:20141020172802p:plain

ここまでのまとめ

スマホサイト作りたい

下調べをした

Onsen UIを使うと簡単に雛形が作れる

次回はページ遷移等、機能を追加していこうと思います。

参考

内定者開発を振り返って

だっちの 裏開発備忘録 に便乗して。

ここ数週間、同期2人と僕の3人でWebアプリの開発をしていました。
先日、社員さんの前で発表を終えたので、この機会に振り返ってみます。

※主に反省点です。
※制作物の内容についてはほとんど触れません。

続きを読む

スパゲティクエリは悪!?

会社の研修中、同期と以下のSQLクエリについて議論になりました。

【Code 1】一番数量の多い注文をした受注先を求めるクエリ
SELECT customer.name, s.item_sum
FROM (SELECT order_no, SUM(quontity) AS item_sum FROM order_detail GROUP BY order_no) s
JOIN orders ON orders.no = s.order_no
JOIN customer ON customer.no = orders.customer_no
WHERE item_sum IN (SELECT MAX(item_sum)
FROM (SELECT order_no, SUM(quontity) AS item_sum
FROM order_detail GROUP BY order_no) s);
続きを読む

【iTerm2 + zsh】色設定をする

先日、ミニマムな.zshrc - footmark を書きましたが、実は記事内の設定、重大な欠陥があります。
そうです。ディレクトリの色が超絶見辛いんです。

f:id:yuk4420:20140923063906p:plain

.zshrc で色設定をする

漢のzsh (9) 世界はモノクロからカラーへ | マイナビニュース を参考にしつつ、.zshrc に以下を追記します。
とりあえず、デフォルト→ディレクトリを緑 に変更。

export LSCOLORS=cxfxcxdxbxegedabagacad
alias ls="ls -G"

無事変わりました。
取って付けた感\(^o^)/
補完の色変えるの忘れてた\(^o^)/

f:id:yuk4420:20140923064747p:plain

先ほどの設定を以下のように書き換えます。
export LSCOLORS の行の色設定と補完の色設定で形式が違うことに戸惑いつつ、とりあえずは気にしないことにします。

autoload -U compinit
compinit

export LSCOLORS=cxfxcxdxbxegedabagacad
alias ls="ls -G"

zstyle ':completion:*' list-colors 'di=32'

確認。
あれ?変わらない。

ちょっと話は逸れるけど、本当は256色から選びたいんだよね。

そこら辺も含めて設定を書き換えたり、色設定ツールを使ってみたけど変わらず。なぜ!
(結構な時間を使ってしまった)

そういえばVimのカラースキーマも適応されないものが多かった。

iTerm2のPreferencesで色設定する

で、辿り着いた解決方法がiTerm2の色設定を変えるというもの(応急処置?)。

.itermcolors という形式のテーマファイルみたいなものがあって、ちょうどVimの設定をしているときにhybidのそれを見つけたので設定してみる。


Hybrid iTerm Colors: https://github.com/w0ng/vim-hybrid

これを保存して、
iTerm -> Preferences... -> Profiles ->Colors -> Load Presets... -> Import...
で読み込む。

おお、変わった!
黄や青などが先ほど設定した色に置き換わっています。

f:id:yuk4420:20140923071516p:plain

個人的に、背景は真っ黒の方がスッキリした印象を受けるので手直し。

iTerm -> Preferences... -> Profiles ->Colors

Basic Colors -> Background
ANSI Colors -> Normal -> Black
を黒に設定します。

ついでに
iTerm -> Preferences... -> Profiles ->Colors -> Load Presets... -> Export...
で保存しておきましょう。

じゃん!
ディレクトリの可視性が上がり、大好きなhybridの色使いになりで大満足です。

f:id:yuk4420:20140923071929p:plain

まとめ

  • zshの色設定よくワカラナイ
  • iTerm2の設定を直接弄ると楽

もはや、iTerm2 + zsh というより iTerm2 の設定でしたね。
この設定方法が王道なのか、僕の環境がおかしいだけなのかはよく分かりませんが、iTerm2を直接弄った方が楽だったので、これもアリかな〜と思います。

こうすればいいよ!っていうのがあれば教えてくださいm(_ _)m

ミニマムな.vimrc

前回の ミニマムな.zshrc - footmark に続き、.vimrc について考えた備忘録。
会社の研修で、

  • これからVimを使い始める人
  • サーバにSSHログインして、Apacheの設定ファイルを弄るくらいでしかVimを使わない人

にとりあえずこれだけ書いておけばいいよ!っていう設定があればいいなあと思い、(既出記事も多いと思いますが)書いてみました。
以下の点を意識しています。

  • 覚えるコマンドを増やさない(キーマッピングプラグインを増やさない)
  • 愛着が持てる
    • これから使い始める人は末永く使えるように
    • メインのエディタが他にある人はVimに浮気するように
続きを読む

ミニマムな.zshrc

友達に影響を受け、zshを使い始めてから早数ヶ月。
デフォルトの設定で使い続けていました。
ぼちぼち最小限の設定くらいはしようと弄った備忘録。

oh-my-zsh

調べてみるとoh-my-zshなるzshの設定を管理するフレームワークがあるらしい。
が、(プラグインをたくさん入れると)重いらしい。

prezto

するとpreztoというoh-my-zshの軽量版に当たるフレームワークを発見。
設定を追加するpluginと見た目をオシャレにするthemeに分かれているとのこと。

zshのインストール

手元のCentOSzshが入っていなかったのでインストールからやってみます。

# yum -y install zsh

確認。

$ zsh --version
zsh 4.3.10 (x86_64-redhat-linux-gnu)

入ってますね!

現在のシェルを確認してみましょう。

$ echo $SHELL
/bin/bash

bashですね。

確認も兼ねてシェルのパス一覧を表示してみます。

$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
/bin/zsh

zshのパスは /bin/zsh になっています。

chsh コマンドでデフォルトのシェルを変更します。

$ chsh
user のシェルを変更します。
パスワード:
新しいシェル [/bin/bash]: /bin/zsh
シェルを変更しました。

ターミナルを再起動して反映させます。
これでzshが使えるようになりました!

preztoのインストール

oh-my-zshを使っていて重いと感じている方、preztoはいかが? - Qiita に則って進めていきます。

まずは公式に載っているコマンドを実行。

$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"

次に初期設定のファイルを設置します。

setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done

反映。

source ~/.zshrc

変わらなくてワロタ。

zshのアップデート

よく見たらログイン時に以下のメッセージが。

prezto: old shell detected, minimum required: 4.3.11

どうやらyumで入れたzshのバージョンが腐ってたようです。。。
ソースからコンパイルして最新版にしましょう。。。

まずソースを取ってきます。

# wget http://sourceforge.net/projects/zsh/files/zsh/5.0.6/zsh-5.0.6.tar.gz/download

解凍して。。。

# tar zxvf zsh-5.0.6.tar.gz

コンパイル

# cd zsh-5.0.6
# ./configure --enable-multibyte

ライブラリが足りたいとか言われたので入れます。。。

# yum install ncurses-devel

気を取り直してコンパイルからのインストール。

# make
# sudo make install

無事アップデートできました!

$ zsh --version
$ zsh 5.0.6 (x86_64-unknown-linux-gnu)

泣く泣くコメントアウト

が、なぜか先のエラーメッセージが消えないので ~/.zprezto/init.zsh の該当部をコメントアウトすることに。

$ vi .zprezto/init.zsh

# Check for the minimum supported version.
# min_zsh_version='4.3.11'
# if ! autoload -Uz is-at-least || ! is-at-least "$min_zsh_version"; then
#   print "prezto: old shell detected, minimum required: $min_zsh_version" >&2
#   return 1
# fi
# unset min_zsh_version

保存して反映ッ!!

source ~/.zshrc

めっちゃ変わってワロタ。

テーマの設定

皆さんはVimの設定を変更するとき、何から弄りますか?
はい!テーマですよね!
zshもテーマから弄りましょう!

以下のコマンドでテーマのプレビューができます。

$ prompt -p

僕は redhat が好みです!
設定しましょう!

vi .zpreztorc

(88行目付近)
zstyle ':prezto:module:prompt' theme 'redhat'

できました!

プロンプトの変更

続いてプロンプトの表示を変えてみます。

vi .vimrc

(以下を追記)
PROMPT="%F{cyan}[%n@%m %d]%f
(๑˃̵ᴗ˂̵)و> "

まとめ

ざっとこんな感じでしょうか。
軽量なフレームワーク zprezto を使って設定の管理を容易にし、最低限テーマとプロンプトを設定してみました。