2015年9月28日月曜日

登山を題材にしたユルフワ本格登山漫画 - 書評-『ヤマノススメ』2巻

ヤマノススメとは


本作は女子高校に入学した少女あおいが、無理やり登山につれていかれるはめになり、 登山に興味をもっていく物語です。現在連載は、コミック アース・スターで行われています。毎月第2, 第4火曜日に更新されています。

作者は『しろ』。ペンネームの由来は「覚え易いから」とのこと。


あらすじ


あおいは、人見知りで人間関係の構築が下手な女の子。
高校生となったあおいは、小学生時代の幼馴染ひなたと再会を果たし、登山に参加することになる。

これまでは友達が少なかったあおいだが、同じ高校に通う上級生の楓、中学生の少女ここなと登山を通して友人となる。
仲良くなった四人は、ボルダリングへ出かける。
高所恐怖症のあおいだが、ボルダリングの恐怖を克服し、自分が変わってきたことを実感する。

週末、あおいに富士山を見せようというひなたの提案で、一同は三つ峠へ向かう。高所恐怖症のあおいは狭い山道の崖で恐怖を覚えるが、ここでも恐怖を克服し三つ峠山頂へ到着する。そして登山の充実感を知り、さらに登山にのめりこんでいく。

作中に登場した山


山名称 標高(m) ブログ記事 WEBデータ
三つ峠 1785 読む 確認

感想


ヤマノススメ2巻では、一同が三つ峠に登山に向かいます。この三つ峠は、 ヤマノススメファンの間では聖地とされています。
石井スポーツでは、聖地訪問と称したイベントが実施されていて、多くのハイカー達が三つ峠に登山に行っています。

アニメという文化が、登山という文化と融合し、登山に興味を持つ人が増えていくという相互作用が生まれている好例と言えるでしょう。

また、三つ峠の描写ですが、すごく細かく記述されています。ここからも作者が登山好きだということが伺えます。
三つ峠はとても素敵な山なので、興味を持った方は是非足を運んでみてください。

登山サイトを運営中です。こちらもよろしくお願いします。
山に関する関連記事
関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年9月25日金曜日

川苔山(かわのりやま)に行ってきました - 奥多摩にそびえる水の山 - 後編

  • 公開日:2015年09月25日

登山日時

  • 2015/09/22

記事内容


その1の続きです。

  • 07:40 新宿からホリデー快速おくたまで奥多摩駅へ
  • 09:45 川乗橋バス停から川苔山へ
  • 10:50 百尋ノ滝(ひゃくひろのたき)に到着
  • 12:30 川苔山山頂に到着
  • 13:00 川苔山山頂出発
  • 14:30 鳩ノ巣駅に到着
  • 14:45 鳩ノ巣駅を出発
  • 17:00 自宅に到着

百尋ノ滝 - 川苔山頂上


百尋ノ滝を超え、山頂を目指します。
すると途中で、どうやって先に進もうかと疑問を抱くような橋にさしかかりました。

跨ぐ

を僕らは選択して先に進みました。女性や子供なら「くぐる」が良い選択でしょう。

山道を歩きながら風景を見渡して思ったことは、「川苔山」の名前は伊達ではないということです。
至る所から川の水の流れる音が聞こえてきます。

川の近くなので体感温度は低いのですが、9月下旬ということもあり、過ごしやすかったです。

そして、お腹も減ってきた昼ごろに頂上に到着しました。

標高は1,363m。登り時間は2時間半くらい。景観は、残念ながらさほど良くありませでした。

山頂は人で溢れていたので、少し離れた位置で昼食を取りました。

登山名物カップヌードル

ジェットボイルでお湯をわかして食べるカップラーメンは

フランス料理より旨い

と僕は思います。ただし、この日の僕は大量に購入してしまったカロリーメイトを食べました。この日は

6本のカロリーメイトを食べました。

もうしばらくカロリーメイトは食べたくありません。そして、昼食を取って体力が回復した後は下山です。

川苔山頂上 - 鳩ノ巣駅


さて、下山です。この下山ルートですが、

特徴があまりない

のが特徴です。二人で他愛もない会話をしながら、どんどんと進みました。
しばらく進むと、舗装された道路を発見

この後も、どんどんと先に進むとあっという間に下山道は終了。

さらに道を下って行くと鳩ノ巣駅に到着

下山時間は1時間半程でした。

帰りの電車の時刻を確認すると、15分ほどで電車が来るので、喉を潤してから鳩ノ巣駅へ行きました。そしてそのまま帰宅。夕方には自宅に戻れました。

まとめ


川苔山(かわのりやま)は、都内付近に住んでいる人にとっては、アクセスに優れた場所です。
近くの御岳山とは異なり、ケーブルカーなどもなく、「登山」そのものを楽しむ山といえます。

有名な百尋ノ滝(ひゃくひろのたき)は迫力があります。入口から1時間程度で到達できるので、百尋ノ滝(ひゃくひろのたき)だけを堪能するのも手かもしれませんね。

個人的には、冬の凍結した百尋ノ滝(ひゃくひろのたき)が見たいと思いました。
ただ、9月でも結構寒さを感じたので、冬は相当の厚着をしないと大変だろうなとも思いました。

以上

川苔山(かわのりやま)が載っている奥多摩地図


ジェットボイル


Instagramに登山写真をアップしました。よかったら「いいね!」をお願いします。
Instagram
登山サイトを運営中です。こちらもよろしくお願いします。
山に関する関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年9月24日木曜日

川苔山(かわのりやま)に行ってきました - 奥多摩にそびえる水の山 - 前編

  • 公開日:2015年09月24日
  • 最終更新日:2015年09月25日

登山日時

  • 2015/09/22

記事内容


奥多摩の川苔山(かわのりやま)に行ってきました。
その詳細な記録です。

川苔山(かわのりやま)


川苔山(かわのりやま)は奥多摩にある山です。
新宿からホリデー快速おくたまで奥多摩駅まで行き、奥多摩駅からバスで15分程度で川苔橋(かわのりはし)バス停まで着くことができます。なので、都内からの登山客が多いです。
有名なスポットとして、百尋ノ滝(ひゃくひろのたき)があります。
冬には凍結した滝の姿を見ることができるので、冬登山にもオススメの山です。

タイムライン(赤字が今回の記事内容)


  • 07:40 新宿からホリデー快速おくたまで奥多摩駅へ
  • 09:45 川乗橋バス停から川苔山へ
  • 10:50 百尋ノ滝(ひゃくひろのたき)に到着
  • 12:30 川苔山山頂に到着
  • 13:00 川苔山山頂出発
  • 14:30 鳩ノ巣駅に到着
  • 14:45 鳩ノ巣駅を出発
  • 17:00 自宅に到着

登山時間


  • 4.0時間(往復)
  • 2.5時間(登り)
  • 1.5時間(下り)

難易度


★☆☆

易しい。

初心者でも安心して登れる山です。
電車に乗るほとんどの乗客が、御岳山のある御嶽駅で降りてしまいますが、ここまで足を伸ばしてみても良いと思います。

登山概要


今回は川苔山(かわのりやま)に行ってきました。
他の選択肢として、「八海山」「滝子山」がありましたが、川苔山(かわのりやま)を選択しました。
登山メンバーは、私とマジコ@ムンクさんは俺の嫁さんとの二人。特に理由はなく、ノリで決めました。川苔山(かわのりやま)だけに。…ごめんなさい。

川苔山(かわのりやま)入口 - 百尋ノ滝(ひゃくひろのたき)


奥多摩駅からバスで15分くらいで、川乗(かわのり)橋バス停に到着することができます。
ここが川苔山(かわのりやま)の入口になります。

山の漢字は「苔」、バス停の漢字は「乗」で異なりますが、同じ山を指しています。個人的には、

「苔」のほうが良い

と思います。「乗」は山っぽくない。

最初のうちは、しばらく舗装された山道を進みます。

しばらく進むと、迂回を促す案内を発見。

橋が壊れたので迂回して!

とのメッセージが。

アベノミクスで景気いいんだから直せ

と悪態をつきながらも、仕方なく二人で迂回路へ。とはいえ、20分くらい登り時間が増えるだけのようです。
迂回ルートもきちんと整備はされていて、その後、本格的に川苔山(かわのりやま)へ突入する案内を発見。

川苔山(かわのりやま)の山道は細い道が多い印象。とはいえ、勾配が緩く、体力の消費速度は遅いです。

しばらく歩き続けると、百尋ノ滝(ひゃくひろのたき)を発見。
辺りは足場が悪く、階段と補助ロープを利用して降ります。

思った以上に迫力があります。

登山よりこっちがメインでは?

と思ってしまいました。

考えることは他のハイカー達も同じようで、みんな写真を取っていまました。
我々も景色を堪能し、写真をとってからこの場を後にしました。

冬には氷結した滝を見ることができるらしいので、一度見てみたいと思いました。

さて、登山はここからが本番になります。川苔山(かわのりやま)の頂上を目指して進みます。

次回に続きます。

川苔山(かわのりやま)が載っている奥多摩地図


Instagramに登山写真をアップしました。よかったら「いいね!」をお願いします。
Instagram
登山サイトを運営中です。こちらもよろしくお願いします。
山に関する関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年9月23日水曜日

Android開発 NavigationViewでheaderを実装する

  • 公開日:2015年09月23日

記事概要


AndroidのNavigationViewでheaderを実装する方法を記載した記事です

環境


  • Android Studio 1.3.0
  • OS X Yosemite
  • android sdk 23(Android 6.0 Marshmallow(マシュマロ))
  • com.android.support:design:23.0.0

はじめに


ライブラリに、com.android.support:design:23.0.0を利用します。とても便利なgoogle純正のライブラリです。
適用するアプリとして、山情報アプリのマウンテンチャンネルを使います。


layout xmlの実装


まずは以下のようにlayoutを実装します。


<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </RelativeLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:menu="@menu/navigation_items" />

</android.support.v4.widget.DrawerLayout>

上記のように実装すると、以下の様な画面を表示できます。

Headerの実装


続いてNavigationViewにheaderを実装します。xmlで指定しても良いのですが、今回は固定データのheaderでなく、認証したユーザー情報を表示するヘッダーを表示したいのでinflateHeaderViewでheaderのviewを生成して作成します。

drawer_header.xml


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@color/default_theme_color" >


    <com.ui.widget.BezelImageView
        android:id="@+id/user_image"
        app:maskDrawable="@drawable/circle_mask"
        android:layout_width="@dimen/expert_icon_size"
        android:layout_height="@dimen/expert_icon_size"
        android:scaleType="centerCrop" />

    <TextView
        android:id="@+id/user_name"
        android:layout_below="@id/user_image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:textColor="@android:color/black" />

</RelativeLayout>


java


    private DrawerLayout drawerLayout;
    private TextView mUserName;
    private BezelImageView mUserImage;

    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    NavigationView navigationView = (NavigationView) findViewById(R.id.navigation);


    // header view inflate
    View drawerLayout = navigationView.inflateHeaderView(R.layout.drawer_header);

    mUserName = (TextView)drawerLayout.findViewById(R.id.user_name);
    mUserImage = (BezelImageView)drawerLayout.findViewById(R.id.user_image);

findByIdではなく、inflateHeaderViewを呼び出すことに注意してください。
headerデータが固定情報でない場合、直接xmlにデータを指定できません。
なので、APIから習得するユーザー情報等を表示したい場合は、inflateHeaderViewを利用します。googleのチュートリアルには記載されていないので気をつけてください。

あとはコンパイルすればOKです。

以上

Androidアプリ【マウンテンチャンネル】


Android app on Google Play

Androidアプリ開発にオススメの本


開発にあると便利なオススメ製品


この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年9月21日月曜日

Androidアプリ開発 volleyをSingletonパターンで使う

  • 公開日:2015年09月21日

記事概要


aAndroidアプリ開発で、volleyをSingletonパターンで実装する記事です。

環境


  • Android Studio1.3.0
  • OS X Yosemite
  • com.mcxiaoke.volley:library:1.0.19
  • android sdk Version 23

はじめに


Android開発で、ネットワーク処理にvolleyを利用するかは賛否が別れるところです。
volleyは強力で便利なライブラリですが、使いこなせるようになるまでは、それなりの経験を積む必要があります。
また、典型的なパターン以外の処理をおこなおうとすると、それなりに手を加えないといけません。最悪、秘伝のタレのようなソースコードになってしまって、volleyライブラリ自体のupdateが不可能になってしまうケースもあるでしょう。
なのでvolleyは、万人に薦められるライブラリとは言えません。
とはいえ、使いどころを間違えなければ、これほど便利なライブラリもありません。googleの公式ライブラリという点も大きいです。
なので今回は、volleyをsingletonパターンで利用する方法を説明します。

volley implements singleton


もし、あなたのアプリケーションが、コンスタントにネットワーク接続を利用するなら、RequestQueueをSingletonパターンで実装すると効率的です。

volleyを実装する時に理解しないといけない重要な概念は、RequestQueueはActivityのcontextでなく、Application のcontextでインスタンスを作成しないといけないことです。
これは、RequestQueueが、アクティビティが再生成されるたびに再生成されるのではなく、アプリケーションのライフタイムがずっと続くことを保証します。

つまり、Activityが消失しても、network接続を保証するような実装を心がけるべきということです。

singleton class creates


では、singletonパターンでvolleyの実装を行ないます。
私がアプリを作成する場合、このクラスをutilパッケージで管理しています。


public class AppNetworkSingleton {

    private static AppNetworkSingleton mInstance;
    private RequestQueue mRequestQueue;
    private ImageLoader mImageLoader;
    private static Context mCtx;

    private AppNetworkSingleton(Context context) {
        mCtx = context;
        mRequestQueue = getRequestQueue();

        ImageLoader.ImageCache imageCache = new LruCacheVolly();

        mImageLoader = new ImageLoader(mRequestQueue,imageCache);
    }

    public static synchronized AppNetworkSingleton getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new AppNetworkSingleton(context);
        }
        return mInstance;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            // getApplicationContext() is key, it keeps you from leaking the
            // Activity or BroadcastReceiver if someone passes one in.
            mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
        }
        return mRequestQueue;
    }

    public <T> void addToRequestQueue(Request<T> req) {
        getRequestQueue().add(req);
    }

    public ImageLoader getImageLoader() {
        return mImageLoader;
    }
}

ImageLoaderで利用しているLruCacheVollyは自作のメモリ管理クラスです。
大きなリスト表示などで大量の画像を表示するとき実装すると効果的です。
参考までに以下にコードを記載しておきます。


/**
 * VollyのImageCacheを利用したLruCacheクラス
 * キャッシュサイズを最大メモリの1/8と定義して初期化。
 * 機種に依存することなく容量をスケールできます。
 * 参考サイト : http://techbooster.org/android/hacks/16474/
 */
public class LruCacheVolly implements ImageLoader.ImageCache {

    private LruCache<String, Bitmap> mMemoryCache;

    public LruCacheVolly(){
        int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
        int cacheSize = maxMemory / 8;       // 最大メモリに依存
        // int cacheSize = 5 * 1024 * 1024;  // 5MB

        mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
            @Override
            protected int sizeOf(String key, Bitmap bitmap) {
                // 使用キャッシュサイズ(KB単位)
                return bitmap.getByteCount() / 1024;
            }
        };
    }

    // ImageCacheのインターフェイス実装
    @Override
    public Bitmap getBitmap(String url) {
        return mMemoryCache.get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        mMemoryCache.put(url,bitmap);
    }
}

以上でvolleyを使う準備は完了です。
では、実際に実装してみましょう。

今回は実装に、自作アプリの「マウンテンチャンネル」を使います。
AppNetworkSingletonクラスのSingletonからgetImageLoaderメソッドを利用して、ImageViewにユーザー画像を設定します。


        // ImageViewを継承したBezelImageViewを生成
        BezelImageView userImage = (BezelImageView)drawerLayout.findViewById(R.id.user_image);
        // SingletoでgetImageLoaderメソッドを呼び出す
        ImageLoader mImageLoader =  AppNetworkSingleton.getInstance(getApplicationContext()).getImageLoader();
        // リスナーの生成
        ImageLoader.ImageListener userImageListener = ImageLoader.getImageListener(userImage, R.drawable.image_loading, R.drawable.nouserimage512512);
        // 設定
        userImage.setTag(mImageLoader.get(user.user_image, userImageListener));

では、ビルドして画面を確認してみましょう。

うまく表示されていますね。

まとめ


REST形式のAPIを利用する場合は、ネットワーク処理にvolleyを使うのを考えるのは良い選択だと思います。
volleyは概念さえ理解すれば便利なライブラリだし、動きも軽量で、なによりgoogle製なので今後もアップデートされ続けて、どんどんとよくなっていくことが期待できます。
とはいえ、初心者が扱うには敷居が高いのも事実です。仕様的に機能に追加実装をしないといけないアプリもあると思います。
なので、プロジェクト導入の際には、扱っているアプリが今後どういったスキルを持つメンバーをジョインさせるのかということまで考えて導入の可否を決めると良いのではないでしょうか。
個人的には、少人数で扱うアプリや、アップデートを高速で回すアプリなら、導入した方が便利だと思います。

以上

Androidアプリ【マウンテンチャンネル】


Android app on Google Play

JavaでSingletonパターンを学ぶのに適した本


Androidアプリ開発用にもっておきたい端末


関連記事 参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年9月20日日曜日

Androidアプリ開発の準備をテンプレート化した - その5 開発ビルドと本番ビルドの設定 環境ごとにパッケージを切り替える -

  • 公開日:2015年09月20日

記事概要


androidのアプリ開発をする前の準備の手順をまとめました。その4の続きです。

環境


  • Android Studio1.3.0
  • OS X Yosemite

はじめに


続いてアプリのパッケージ設定を行います。
作成するアプリによって、【開発】【ステージング】【本番】等の複数の環境を用意する必要があると思います。
その場合、パッケージが同一だと実機にインストールするだけでも一苦労です。
なので、gradleでパッケージをわけておく設定をします。
そうすることで、同一機種に色々な環境のアプリをインストールできてテスト効率をあげることができます。

buildTypes


buildTypesはビルドの種類を設定できます。デフォルトでは、debugとreleaseが自動的に設定されています。
一般的にはdebugは証明書なしでapkを作り、releaseは署名ありでapkを作成します。


    buildTypes {
        debug {
           
        }
        release {
           
        }
    }

パッケージ名を分ける

上記にも記載したように、開発(debug)と本番(release)を同じパッケージにするのはやめましょう。そうしないと、開発と本番の切換えで、デバッグ時に大変な思いをすることになります。


    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }
        release {
        }
    }

applicationIdSuffix属性を設定することで、パッケージ名に接尾辞を付けることができます。
上記は、デバッグ時のapkのパッケージ名に接尾辞を付けて、デバッグ用apkをインストール時に本番リリース用のパッケージに上書きしないようにしています。

バージョン名を設定する

開発(debug)にはバージョン名も設定しておきましょう。アップデート前とアップデート後ではテストが必要になります。この設定により、以前と以後のapkを同一端末に入れることができるので、テストの実行が楽になります。日付用の関数を用意して利用するのも良い考えだと思います。


    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            versionNameSuffix "1"
        }
        release {
        }
    }

デバッグの有無を設定する


    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            versionNameSuffix "1"
            debuggable true
        }
        release {
            debuggable false
        }
    }

開発(debug)はdebuggable true。つまり、デバッグを許可します。本番(release)は、debuggable false。つまり、デバッグはしません。

zipAlignEnabledを設定する

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            versionNameSuffix "1"
            debuggable true
            zipAlignEnabled true
        }
        release {
            debuggable false
            zipAlignEnabled true
        }
    }

zipAlignEnabled true。つまり、zip化します。この設定をtrueにしないと証明書付きのapkが作成されないので注意してください。

minifyEnabledを設定する

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            versionNameSuffix "1"
            debuggable true
            zipAlignEnabled false
            minifyEnabled false
        }
        release {
            debuggable false
            zipAlignEnabled true
            minifyEnabled false
        }
    }

minifyEnabled false。つまり、minifyしません。これはどちらでも構わないと思います(違いがよくわかりません)

apkファイルを出力


コマンドプロンプトを開いてコマンドを叩きます。


// プロジェクトフォルダに移動
cd {プロジェクトフォルダ}

// gradleを実行
./gradlew clean build

apkファイルが出力されたことを確認します。出力場所は、{プロジェクトフォルダ}/app/build/outputs/apkです。
上記で作成したアプリをインストールしてみましょう。
アプリは、私が開発している【マウンテンチャンネル】を利用します。

上記のアプリはversion1.2.0なのですが、versionNameSuffix 1を設定しているので【1.2.01】となっています。
パッケージ名も.debugが追加されています。

まとめ


さて、5回に渡って記述してきた【Androidアプリ開発の準備のテンプレート化】ですが、これで終了です。
他にもやっておいたほうがよいことはあるのですが、キリがないのでこれで一旦終了します。

私がandroidの開発を始めたのはandroid1.5で、1.6のxperiaが初めてのandroid端末の購入でした。
わずか4年ほどですが、色々変わりましたし、これからも変わっていくでしょう。
と、同時に多くのことが理解できてきました。
やはり、長く続けることは重要です。

そういったことも、これからブログを通して発信していきたいと思うので、よろしくお願いします。

でわ。

Androidアプリ開発用にもっておきたい端末


関連記事 参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年9月18日金曜日

Androidアプリ開発の準備をテンプレート化した - その4 開発ビルドと本番ビルドの設定 apkの自動生成 -

  • 公開日:2015年09月18日
  • 最終更新日:2016年01月31日

記事概要

androidのアプリ開発をする前の準備の手順をまとめました。その3の続きです。

環境

  • Android Studio1.3.0
  • OS X Yosemite

プロジェクトビルド

続いてアプリのビルド設定を行います。
途中参加のプロジェクトとかでよく見かけるビルドパターンに、

Android StudioやEclipseでapkファイルを出力する

というものがあります。
この手法は

ビルドのアンチパターン

です。今後はやめましょう。この手法を採用している現場に限って、keystoreを無くしただの、パスワードが分からないだのと無用なトラブルを巻き起こしている確率が高いと思います。

Android Studioから取り入れられたgradleを使ったビルド手法は、先人のノウハウが詰まっています。
gradleを使えば、簡単にandroidアプリのビルドを自動化できます。この作業を後回しにすると、設定をやらなくなるので、

最初に自動化してください

build.gradleの設定

では、まずapp/build.gradleの設定を行ないます。
Android Studio1.3.0のデフォルトで作成されたapp/build.gradleは以下のように記述されています。

build.gradle

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

apkファイルの作成を自動化するには、signingConfigsをbuildTypesの上に追記します。

build.gradle

    // 追加
    signingConfigs {
        debug {
        }
        release {
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

signingConfigsの中にdebugreleaseを追加しました。
debugは「開発」apkでreleaseは「公開」apkになります。
続いて、buildTypesにもdebugを追加します。

build.gradle

    signingConfigs {
        debug {
        }
        release {
        }
    }
    buildTypes {
        // 追加
        debug {
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

これで準備OKです。では、signingConfigsでapkファイル自動出力の設定をしていきましょう。

signingConfigs

signingConfigsを利用すると、証明書の設定がおこなえます。この設定により、gradleコマンドを実行するだけで様々な種類のapkを作成、出力できるようになります。
adnroidアプリの開発でよくありがちなのが、
「keystoreのパスワードがわかない」
「keystoreファイルが見つからない」
等のヒューマンミス(管理不備)です。

最悪のケースだと、
「keystoreを作成した外注先のエンジニアが辞めていた」
なんてこともあります(経験済)。

そういったケースを防ぐためにも、gradleでビルドの設定をしておくべきです。

keystoreの設定

apk作成時に利用するkeystoreを設定しましょう。以下のように記載します。

build.gradle

    signingConfigs {
        debug {
            // 追加
            storeFile file("debug.keystore")
        }
        release {
            // 追加
            storeFile file("release.keystore")
        }
    }
    buildTypes {
        debug {
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

debug(開発)用のdebug.keystoreはandroid導入時にインストールされたkeystoreを利用しましょう。では、debug.keystoreファイルをプロジェクトフォルダ配下に移してみましょう。

build.gradle

// macの場合、debug.keystoreファイルはここの配下にある
cd ~/.android/

// ファイルリストの確認
ls -l

// debug用のkeystore
debug.keystore

// debug.keystoreをコピー
cp -a debug.keystore {プロジェクトフォルダ}

debug(開発)用のkeystoreの準備は完了です。続いて、公開(release)用のkeystoreをプロジェクトフォルダ配下に配置します。当然ゼロベースで作るアプリに本番keystoreはないので、Android Studioで作成します。

【Generate Signed APK】を選択します。

【Create new ...】を選択します。

keystoreの出力場所を選択します。プロジェクトフォルダの配下を指定します。
File name:はrelease.keystoreにしておきます。(どんな名称でも平気です)

keystoreに必要なデータを入力していきます。入力したpasswordは忘れないようにメモするか、キャプチャを撮っておきます。
入力したら、先へ進みます。全ての手続きが終わりrelease.apkが作成されるとPOPで知らせてくれます。

これで本番用のkeystoreが完成しました。
では、今入力した情報をapp/build.gradleのreleaseに記載します。
まずは、app/build.gradleにパスワードを設定します。

build.gradle

    signingConfigs {
        debug {
            storeFile file("debug.keystore")
            // 追加
            storePassword "android"
        }
        release {
            storeFile file("release.keystore")
            // 追加
            storePassword "xxxxxxx"
        }
    }
    buildTypes {
        debug {
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

storePasswordにパスワードを記述します。debug.keystoreはデフォルトのままで問題ないと思います。
keyAliasの設定をします。

build.gradle

    signingConfigs {
        debug {
            storeFile file("debug.keystore")
            storePassword "android"
            // 追加
            keyAlias "androiddebugkey"
        }
        release {
            storeFile file("release.keystore")
            storePassword "xxxxxxx"
            // 追加
            keyAlias "xxxxxxx"
        }
    }
    buildTypes {
        debug {
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


Aliasで入力したAliasを設定します。
最後にkeyPasswordの設定をします。

build.gradle

    signingConfigs {
        debug {
            storeFile file("debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            // 追加
            keyPassword "android"
        }
        release {
            storeFile file("release.keystore")
            storePassword "xxxxxxx"
            keyAlias "xxxxxxx"
            // 追加
            keyPassword "android"
        }
    }
    buildTypes {
        debug {
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

証明書の設定は完了です。最後に上記で設定した証明を利用する設定をbuildTypesに記述します。

build.gradle

    signingConfigs {
        debug {
            storeFile file("debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
        release {
            storeFile file("release.keystore")
            storePassword "xxxxxxx"
            keyAlias "xxxxxxx"
            keyPassword "android"
        }
    }
    buildTypes {
        debug {
            // 追加
            signingConfig signingConfigs.debug
        }
        release {
            // 追加
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

signingConfigsで設定した証明書の内容が反映されるようになりました。
最後にapkを出力できるようにzipAlignEnabledをtrueにして記載します。

build.gradle

    signingConfigs {
        debug {
            storeFile file("debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
        release {
            storeFile file("release.keystore")
            storePassword "xxxxxxx"
            keyAlias "xxxxxxx"
            keyPassword "android"
        }
    }
    buildTypes {
        debug {
            signingConfig signingConfigs.debug
            // 追加
            zipAlignEnabled true
        }
        release {
            signingConfig signingConfigs.release
            // 追加
            zipAlignEnabled true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

apkファイルを出力

コマンドプロンプトを開いてコマンドを叩きます。

build.gradle

// プロジェクトフォルダに移動
cd {projecrFolder}

// gradleを実行
./gradlew clean build

apkファイルが出力されたことを確認します。出力場所は、{プロジェクトフォルダ}/app/build/outputs/apkです。

apkが作成されていることが確認できました。 これでターミナルのコマンドからや、jenkins等のツールを利用してapkが作成できるようになりました。
gitで管理すればkeystoreやパスワード等の紛失も心配もありません。

でも、これだけではまだ不十分です。はgradleで環境ごとのパッケージ設定をします。
続きます。

PICK UP
関連記事 参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年9月13日日曜日

Androidアプリ開発 vagrantで作成したローカル開発環境にwifiで接続する

  • 公開日:2015年09月13日
  • 最終更新日:2015年09月29日

記事概要


androidのアプリ開発をする時、vagrantで作成したネットワーク環境にwifiで接続する方法を記載した記事です。

環境


  • Android端末
  • OS X Yosemite
  • vagrant 1.6.3

はじめに


androidアプリ開発やiphoneアプリ開発をする時、vagrantやDocker等のローカル環境でAPIやWEBアプリ側を作成するケースは多いと思います。
その場合、スマホからネットワークに接続する必要があります。今回はvagrantの開発環境にwifiで接続する方法を説明します。
今回は、私の開発しているアプリ「マウンテンチャンネル」の開発環境を使って、そのやり方を説明します。

vagrantファイルの変更


bridge するインターフェースを調べます。


VBoxManage list bridgedifs |grep '^Name:'
Name:            en1: Wi-Fi (AirPort)
Name:            en0: Ethernet

vagrantの置いてあるプロジェクトフォルダに移動し、以下の記載を追記します。


  # config.vm.network "private_network", ip: "192.168.33.12", nfs: true
  config.vm.network :public_network, :bridge => "en1: Wi-Fi (AirPort)"

上記の設定をすることで、Wifiで接続できるようになります。

vagrant起動



vagrant up

wifiを使うので1を入力します。

vagrant接続


起動したらvagrant内のアプリを起動します。


  vagrant ssh

  cd {プロジェクトフォルダ}
  // unicornを起動
  ./start-unicorn.sh
  // nginxを起動
  sudo service nginx restart
  // ipアドレスを確認
  ip -f inet addr

IPアドレスを確認したら、まずはPCのブラウザから接続して動作を確認します。

次にスマホのブラウザから接続します。

PCでもスマホでも画面が表示されました。
これでローカル環境でWEBの開発をしながら、スマホを使ってAPIやWEBにアクセスできます。
以上

Androidアプリ開発にオススメの本


登山サイトを運営中です。こちらもよろしくお願いします。
参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年9月11日金曜日

Androidアプリ開発の準備をテンプレート化した - その3 .gitignoreの作成とgitの登録 -

  • 公開日:2015年09月11日
  • 最終更新日:2015年09月20日

記事概要


androidのアプリ開発をする前の準備の手順をまとめました。その2の続きです。

環境


  • Android Studio1.3.0
  • OS X Yosemite

gitの初期化



// プロジェクトフォルダに移動
cd {project_folder}
// .gitを作成
git init

.gitignoreの作成


プロジェクト直下のフォルダに移動して、.gitignoreを作成します。


// プロジェクトフォルダに移動
cd {project_folder}
// .gitignoreを作成
touch .gitignore

.gitignoreファイルに以下の記載をします。


*.apk
*.ap_
*.dex
*.class
bin/
gen/
local.properties
.classpath
.project
proguard/
*.iml
*.ipr
*.iws
.idea/workspace.xml
.idea/tasks.xml
.idea/libraries/
.gradle
*/build/
.DS_Store



重要なのはbuildフォルダを管理しないことです。
ライブラリも含めて管理対象としないようにアスタリスクで設定しています。

gitのコミット


.gitignoreファイルを作成したらコミットします。


git add -i

*** Commands ***
  1: status   2: update   3: revert   4: add untracked
  5: patch   6: diff   7: quit   8: help
What now> 4

// .gitignoreファイルを追加して前の画面に戻る

*** Commands ***
  1: status   2: update   3: revert   4: add untracked
  5: patch   6: diff   7: quit   8: help
What now> 4

// .gitignoreが反映されていることを確認する

// 全ファイルをステージングに追加
git add --all

// 念のために確認
git status

// コミット
git commit -m "first commit. project created"

// 確認
git log
commit 6bb73326b4185855b940f14ea6faf2f69640d068
Date:   Thu Aug 6 07:44:14 2015 +0900

    first commit. project created

以上でプロジェクト管理の用意は終了です。後はgitHubやBitbucktに登録しておきましょう。
個人開発だとgit flowを使うかどうかは迷うところです。

Androidアプリ開発にオススメの本


Androidアプリ開発用にもっておきたい端末


関連記事 参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...