読者です 読者をやめる 読者になる 読者になる

YDブログ

(Y)やりたいことしか(D)できない病のブログです。

「クラフトフェアまつもと2016」行ってきた

グルメ 旅行・観光

先週の土日は日本最大級の工芸イベント「クラフトフェアまつもと」に行ってきました。

会場規模の大きさもさることながら、松本市内も見どころ満載で二日間ではとうてい回りきれませんでした。 これは来年も行かないと……ということで、今回、行ってよかったところ・行きたいところをまとめてみました。

アクセス

会場は長野県松本市です。

コンパクトな街なので電車と歩きでOK。「松本駅」から会場「あがたの森公園」まで徒歩20分程度、途中の市街もいろいろやってるので歩くのも苦になりません。 マイカーは使わないほうが親切だけど、駅周辺に駐車して歩いても行けます。

バスDAYについて - 松本クラフト推進協会

おすすめ観光スポット

せっかくなので文化の香りがする素敵な街中も探索しました。

松本市美術館

草間彌生の生誕地ということで常設展がある。この日の特別展は民藝運動で知られるバーナード・リーチ展。

松本民芸感

ちょっと離れたところにあるので車が必要。 ここでも作家さんがわりとお店をだしていました。

しづか

民藝品に囲まれた居酒屋。食事もさることながら、店内の装飾がみどころ。ランチもお得。

しづか - 松本/居酒屋 [食べログ]

珈琲まるも

民芸家具とコーヒーの名店。宿泊もできる。

tabelog.com

六九クラフトストリート

メイン観光ストリートの縄手通り商店街の反対側、「ミナペルホネン」のある通りもおしゃれなお店が集中している。

六九クラフトストリート 松本 2016 – monbus

民芸の宿 旅館すぎもと

滞在中に知った、民芸家具の旅館。次はここに泊まりたい。

ryokan-sugimoto.com

まとめ

器・箸・フォーク・スプーンなど食器はもちろん、iPhoneの革ケースとかバッグ、腕時計、ランプシェードなど欲しいものはたくさんあったんですが、初日に歩きすぎて2日目は足腰が立たず、思うように買い物ができませんでした。

覚えておいた作家さんのネットショップを覗いて見てもオンラインの方は品揃えもぜんぜん薄く、貴重な機会を逃したと後悔しきり……次回は計画的にまわろうと思います。

(出展作家の一覧はコチラです。)

今すぐネットが必要?「WiFiレンタル」試してみた

旅行・観光 節約

明日から1週間だけ高速インターネットが必要

かれこれ10年以上?WiMAXで満足してたんですが、先月、クレジットカードの更新を忘れて一方的に解約されてしまいました。

けっきょくフレッツ光に乗り換えたんですが、開通までの期間はネットが使えません。 仕事でつかうのでテザリングだけだと不安……そんな緊急のとき、WiMAXのレンタルサービスに助けられました。

WiMAXのレンタル申し込み方法

「Wi-Fiレンタル」でググると同様のサービスが沢山引っかかります。 自分はこちらを申し込みました。

wifi-rent.jp

「即日配送」「土日祝日対応」が決め手。 ゴールデンウィーク中に申し込んで、休み明けの2日後にちゃんと到着しました。

モバイルルーター到着。トラブル発生

ルーターと返却用封筒が郵パックで届きました。

肝心のルーターの写真を撮り忘れました(笑)。 実際に届いたのはWiMAX 2+対応の最新機種でした。

端末裏面のSSID/パスワードを入力すれば使えるはずが…つながりません。

サポートに電話すると、直前に利用していた方がIDとパスワードを変更していたことが判明。 本来は会社側で設定を毎回リセットするそうですが、今回はたまたまハズレを引いたようです。

無線ルータの設定方法を教えてもらい、無事SSIDとパスワードが確認できました。

返却

同梱の返却用封筒に名前・住所を書き込み、控えのシールをはがしてから、ルーターを入れて返却予定日に郵便局かポストから返却します。

郵便ポストに投函する場合、返却日の最終集荷時間までに投函します。 集荷時間はポストに書いてありますが、土日祝日は集荷回数が少なく、最終時間もはやいので要注意です。

返却場所はローソン内の郵便ポストが便利です。 場所がわかりやすいのに加え、店員さんに聞くと集荷が終わったかどうか教えてくれるので便利です。

料金

4泊5日で2,976円でした。

延滞料金・違約金

サイト上からいつでも延滞申請できます。

申告せずに延泊すると1日500円かかります。 付属品のケーブル・アダプタを返却し忘れると1000円ずつ請求されます。

料金等は利用するサービスによって違うので注意してください。

まとめ。ワイマックスが気になるならまずレンタルでお試し

本当は光にしたいけど出張や転勤、旅行が多くて仕方なくWiMAXを契約していた方は一考の価値アリ。 WiMAXに興味があるけど、速度や繋がりやすさがわからなくて使っていないという人にもオススメです。

「React Native」入門

Javascript プログラミング React Native

今年のプログラミングネタは「React Native」推しです。

本来であればコマンドを2つ3つ覚えるだけで、APIドキュメント片手にゴリゴリ開発できるはず……が、記事を書いた時点のバージョンはいまだ0.25。 けっしてマニュアル通りすんなりコトは運びません。 ハマった点を記録しておきます。

予備知識。「React Native」とは?

React Native」はJavascriptでiOS・Androidのハイブリッドアプリが作れる開発環境です。 Web開発フレームワーク「React.js」をベースにしています。 facebookが開発しています。

HTML5・WebViewハイブリッドアプリではない

React Nativeは数あるJavascriptフレームワークのひとつですが、IonicCordovaのようにブラウザ・Webビュー(ブラウザ)経由のモノではありません。

書き方こそWeb向けJSフレームワーク「React.js」風ですが、かぎりなくNativeに近いアプリが作れます。

  • 「React Native」 iOS・Androidにしか対応しませんが、パフォーマンスに優れている
  • 「React.js」「Cordova」の組み合わせ iOS・Android・Webの3プラットフォームに対応。パフォーマンスは劣る

IonicというよりRubyMotionみたいな感じです。

Reactはコンポーネント指向

React.jsはコンポーネント思考です。 HTMLでいうdivとかimgとかいうタグを独自に定義できます。 AngularJSだと「ディレクティブ」にあたります。 class コンポーネント名 extends Componentで定義します。

ビルトインのコンポーネント(クラス)は公式ドキュメントにあります。 https://facebook.github.io/react-native/docs/getting-started.html

完全なハイブリッドアプリではない

React Nativeはネイティブのパフォーマンスを引き出すため、UIまわりであればビルトインのAPIでもiOS用とAndroid用が分かれています。

完全な同一コードで両プラットフォームに対応できるわけではありませんが、コードの大半を共通化できます。

ECMAScript6

新しいES6の構文が使えます。 コンポーネントの定義方法は従来のJSなら

var MyComponent = React.createClass({
  getInitialState() {
    return { /* initial state */ };
  },
});

ですが、ES6だと

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = { /* initial state */ };
  }
}

のような書き方になります。

MVCとflux

Ruby on Railsなど、これまでのウェブ開発フレームワークはMVC(Model、View、Controller)パターンを採用していました。

React自体はこのうちのビューしか扱わないので、大規模アプリケーションでモデルが複雑な場合はフレームワークを別に導入します。

その際、MVCに代わり「flux」アーキテクチャが勧められています。 fluxの実装は「redux」です。

使い方

チュートリアルはコチラ。

facebook.github.io

下のリンク集も参考になります。

github.com

インストール〜シミュレータ・実機でテスト

node.js、npmがインストール済みとします。

開発に必要なターミナルのコマンドは3つ。

  • npm install -g react-native-cliでReact Native本体のインストール
  • react-native init プロジェクト名でプロジェクト作成
  • react-native run-iosまたはreact-native run-androidでビルド

です。ビルドコマンドでサーバーが立ち上がり、USBにスマホが繋がっていれば実機、繋がってなければエミュレータへテストアプリが配信されます。

シミュレータ・テスト端末の操作方法

シミュレータのエラー行をクリックすると、エディタの該当箇所にジャンプできます(少なくとも自分の使っているAtomの場合)。

スマホ実機を振るか、iOSシミュレータなら「コマンド+D」、Androidシミュレータならターミナルからadb shell input keyevent 82で開発メニューが出せます。

コードの書き方

ソースコードのエントリポイントはindex.ios.jsindex.android.jsでプラットフォームによって分かれています。 ファイル名にを"ios"とか"android"をつけるとプラットフォームに応じたコードがimportされます。

下の見本はindex.ios.jsの初期コードです。

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from 'react-native';

class newProject extends Component {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}>
          Welcome to React Native!
        </Text>
        <Text style={styles.instructions}>
          To get started, edit index.ios.js
        </Text>
        <Text style={styles.instructions}>
          Press Cmd+R to reload,{'\n'}
          Cmd+D or shake for dev menu
        </Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

AppRegistry.registerComponent('newProject', () => newProject);

class クラス名 extends Componentで定義したコンポーネントは、レイアウトrender()メソッド内で<クラス名>として呼び出せます。

各コンポーネント(HTMLタグのようなもの)はstyle属性で修飾します。

変数はconstructor()関数内で初期化(古いやり方ならgetInitialState()関数)、状態変数はthis.stateから読み、this.setState()で書き込みます。

これだけわかれば、あとはサンプルコードで自然におぼえられます。

www.reactnative.com

rnplay.org

console.log()でデバッグ

iOSだとXCodeのパネル上にconsole.log()の出力が得られます。

Terminalで見たいならiOS Simulatorのシステムログから確認できます。

0.29以降のReact Nativeにはreact-native log-ios react-native log-androidというコマンドもあるそうです。

つまったところ

ドキュメントが整備されていないのでトライ・アンド・エラーでがんばりましょう。

「Could not connect to development server.」エラー対策

ドキュメント通りセットアップ、ビルドすると最初に必ず直面するエラーがコレです。

React Nativeでは、スマホから開発サーバにアクセスしながら開発するので、スマホ側にPCのIPアドレスを教えなければいけません。

iOSの場合はAppDelegate.mファイル内jsCodeLocationのIPアドレスを直接書き換えるか、AndroidならスマホのメニューDev Settings > Debug server host & port for deviceからPCのIPアドレスを入力します。

iOSの場合はさらに後述のATSを無効に設定する必要があります。

開発機のIPアドレスはOSXならターミナルのifconfigコマンドで確認できます。 デフォルトのポート番号は8081です。

iOSのエラー対策

ATS(App Transfer Security)でローカルホスト接続許可

React Nativeでの開発中はスマホからサーバにつなげるため、iOS/AppDelegate.mのlocalhostを開発機のIPアドレスに書き換える必要があります。

iOSの場合はさらにセキュア通信(HTTPS)がデフォルト推奨で、通常のHTTP接続は許可が必要です(ATS=App Transfer Security)。 XCodeで許可を明示しなければスマホから開発機に接続できません。

ATSを無効にするにはinfo.plistに下のキーを追加します(下のやり方は本番環境では非推奨。限られたホストだけ許可すること)。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

シミュレータで"Network request failed"エラー

いろいろ試してダメなら iOS Simulator -> Reset Content and Settings... です。

Androidのエラー対策

「SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.」

Android Studio(SDK)がインストール済みでも.bash_profileで環境変数「ANDROID_HOME」を設定しないと怒られます。

「failed to find Build Tools revision 23.0.1」

android list sdk -aでBuild Tools revision 23.0.1を探します。 Build Toolsがリストの7番目だった場合は android update sdk -a -u -t 7 コマンドで治ります。

スマホに転送できないとき

Execution failed for task ':app:installDebug'.
 > com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: Unable to upload some APKs

みたいなエラーが出た場合は、gradleのバージョンをダウングレードします。 android/build.gradleファイルのclasspath 'com.android.tools.build:gradle:1.3.1'の1.3.2を1.2.3に変更します。

プラグインのインストール方法

パッケージは基本的にnpmでインストール。 モノによってはrnpmコマンドrnpm linkでネイティブのプロジェクトにリンクします。

まとめ

React Nativeはシンプル・学習コストが低く、パフォーマンスも優れていて将来性の高さを感じます。

いまは普及途中でライブラリも充実していないのでJavaScriptで書けるのはUIや通信周りだけ、コア機能はネイティブで書いてプラグインで渡す場面が多くなりそうです。

そのうち1年もすれば環境も充実してJavascriptだけで事足りそうですが、それまではReact.jsとObjectiveCとAndroidSDKの3つの知識が必要かもしれません。

納期が2週間とかの場合(笑)ならこれからもIonicをつかいますが、今後のアプリ開発はReact Nativeをメインにしようと思います。

「青柏祭」で知られる能登「七尾」の観光ガイド

まとめ グルメ 旅行・観光 金沢 北陸新幹線

石川県のゴールデンウィークの一大イベントといえば七尾市「青柏祭」と能美市「九谷茶碗まつり」。 GWは終わっちゃいましたが、さいきん勢いを感じる七尾市の最新・観光スポットをまとめてみました。

お祭り・イベント

「青柏祭」

七尾市といえばコレ。毎年ゴールデンウィーク中(2016年は5月3日~5月5日)に開催されるお祭り。

3階建の家に匹敵する巨大な3つの曳山(山車。通称「デカ山」)が街を練り歩く姿がすごい。 観光客も自由参加で引っ張れます。

七尾市の地理

平成の市町村合併の結果、七尾市はだいぶ広くて、観光エリアは大きく

  • 七尾市街
  • 和倉温泉
  • 能登島
  • 中島町

などに分けられます。

この記事で紹介するスポットを地図にまとめました。

観光スポット

能登食祭市場

七尾に来たらまずはココ。七尾駅から徒歩15分程度。 市場で買った鮮魚をその場で食べられる浜焼がおすすめ。 おみやげも充実しています。

www.shokusai.co.jp

一本杉通り

「高澤ろうそく店」「鳥居醤油店」、雑貨点「歩らり(旧上野啓文堂)」、昆布の「しら井」などが立ち並ぶ七尾観光の中心地。

ipponsugi.org

グルメ

幸寿し

七尾を代表する寿司の名店です。文句なしの激ウマ・格安・要予約。

tabelog.com

ICOU

酒蔵を改装した建物が観光地と化しているカフェ。ランチがお得。

tabelog.com

一歩

激安・ボリューム満点の定食が地元の人に大人気の居酒屋。 混んでいるけど予約すれば、ほぼ確実に食べられます。

tabelog.com

チェルキオ

七尾駅から歩いて5分にある本格派ジェラート。

tabelog.com

月とピエロ

民家の片隅でやっているパン屋さん。 方向性としては東京・世田谷「シニフィアン・シニフィエ」? 街の中心部からは離れているのでアクセスは車のみ。石川県で一番好きなパンですが、道がわかりにくく不定休が多いので遠来の観光客にはオススメできません。

tabelog.com

欅庵(けやきあん)

ここも住居兼店舗の手打ちそばのお店。21世紀の食べ物屋さんはこういう形でないと、という気がします。

tabelog.com

ミュゼドアッシュ

東京の自由が丘「モンサンクレール」を経営する七尾市出身の有名パティシエ、辻口博啓のカフェ&ミュージアム。 和倉温泉・総湯から歩いていけます。

tabelog.com

能登島サンスーシィ

能登島のフレンチ食堂。 地元の食材にこだわったランチもリーズラブルでおすすめ。 能登島には水族館とダイビングスポットもあります。

かき処「海」

中島は毎年、冬の一番寒い時期に「牡蠣まつり」をひらいている牡蠣で有名な町です。

tabelog.com

あめや

飴(アメ)屋じゃなくてウナギのお店です。建築家・中村好文デザインのお店も見どころのひとつ。

tabelog.com

おみやげ

昆布の「しら井」

金沢のひがし茶屋街にある支店も人気。

tabelog.com

なまこや

ナマコの腸の塩辛「このわた」、ナマコの卵巣干し「くちこ」などのマニアックな海鮮珍味のおみやげで驚かせたいなら和倉温泉のこのお店。

tabelog.com

温泉

和倉温泉総湯

日本一の旅館「加賀屋」で知られる和倉温泉の総湯です。 営業時間7:00〜22:00。入浴料は大人440円(タオル210円)。

www.wakura.co.jp

ひょっこり温泉・島の湯

能登島にある温泉。ビーチとつづいているので、夏は海で遊んでから入れます。

能登島 ひょっこり温泉 島の湯

エンタメ

のとじま水族館

島の水族館です。能登島では野生のイルカウォッチングもできます。

www.notoaqua.jp

七尾市へのアクセス

車での移動をおすすめします。輪島方面へも遊びに行けます。

関西方面からはJR「特急サンダーバード」

大阪駅から和倉温泉駅まで、特急で3時間弱です。

関東から「金沢駅」経由で「JR七尾線」乗り継ぎ

金沢から特急なら1時間、普通電車だと1時間30分ほどかかります。

関東から「新高岡駅」経由でレンタカー

金沢に立ち寄らなくて良いならこのルートが最速かもしれません。 2015年全線オープンしたばかりの「能越自動車道」で七尾〜氷見間が自動車で1時間です。

途中、氷見市の道の駅に立ち寄るのがオススメコース。 道の駅とは名ばかりの市場から温泉、グッドデザイン賞を受賞した博物館?まである複合施設です。

まとめ

北陸新幹線開通2年目に入って客足は衰えるどころかますます増えています。 リピーター向けによりマニアックな情報をと思い、輪島や金沢と比べて知名度で劣る七尾市の情報をまとめてみました。

じっさい七尾市はいまのところ知名度はさほど高くないんですが、訪れるたびお店が増えていて良い雰囲気です。 GWに遊びに行った時はコワーキングスペースまで発見しました。

石川県は「山」の加賀・白山と「海」の能登半島があります。 「夏は海!」という人は能登観光の足がかりに七尾市に注目してみてください。