月別: 2011年2月

中世都市鎌倉を歩く

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


山形大学教授である松尾剛次氏によって著された中世の鎌倉について紹介した一冊です。
従来の研究においては放置され歴史と土砂に埋れていた時期の鎌倉を文字通り掘り起こした内容です。

歴史好きな人は言うまでもありませんが、鎌倉のハイキングコースや切通しを歩いたことがある人にお勧めです。
「ああ、なるほどあそこはそういうところだったのか」と散策時の体験と知識がリンクする喜びを味わえると思います。
章立ては源氏、北条氏、足利氏、上杉氏という主の変遷で分けられており、
時代背景とその時代における”鎌倉”が解説されています。


・高時腹切りやぐら~八雲神社をつなぐ祇園山ハイキングコースがありますが、その祇園山の名前の由来

・和賀江島と極楽寺、光明寺の関係
・頼朝の墓と大倉御所(西御門)

・建長寺や巨福呂坂切通し周辺の成立

・源氏山公園(化粧坂)~高徳院(大仏)をつなぐ大仏ハイキングコース、極楽寺辺りの過去

・カヤックのボウルズや清川病院付近が鎌倉御所跡らしい

・六浦道~朝比奈切通し~金沢称名寺や鎌倉公方屋敷

・由比ガ浜の人骨
・鶴ヶ岡八幡宮の各時代での存在意義
・古河公方(鎌倉公方)/関東管領と戦国大名とのつながり

などなど、自分には列挙すればきりがないくらい興味深い要素満載の一冊でした。

Blogger Data API

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


http://code.google.com/intl/ja/apis/blogger/docs/2.0/developers_guide_java.html

 Developer’s Guide: Java

BloggerデータAPIはクライアントアプリケーションに GoogleデータAPIフィードの形式でBolggerの内容を閲覧・更新することを可能にします。
クライアントアプリケーションは新しいブログポストの作成、既存のブログポストの編集または削除、詳細な基準に一致するブログポストのクエリをするためにBloggerデータAPIを使うことが出来ます。
BloggerデータAPIの機能の背景の提供に加えて、このガイドはJava client libraryを使用してベーシックデータAPIと対話する例を提供します。 クライアントライブラリのセットアップのヘルプについてはGetting Started with the Google Data Java Client Libraryを見てください。ドキュメントと対話する為のJava クライアントライブラリによって使用される根本的なプロトコルについてより理解することに興味がある場合はprotocol guideを見てください。

 内容

 対象読者

このドキュメントはBloggerと対話できるJavaクライアントアプリケーションを作成したいプログラマーを対象としています。
このドキュメントは対象読者がGoogle Data APIs protocol.の背後にある概括的な概念を理解していると仮定します。
クライアントライブラリによって提供されるクラスとメソッドについてのリファレンス情報についてはJava client library API referenceを見てください。概括的なBloggerデータAPIリファレンス情報については、Protocol reference guideを見てください。

 はじめに

クライアントライブラリのセットアップのヘルプについてはGetting Started Guideを見てください。
Javaクライアントライブラリを使用するにはJava 1.5が必要です。クライアントライブラリのダウンロード後に  java/lib/gdataclient-1.0.jarファイル内に(このページでの学習を)始める為に必要なクラスを見つけるでしょう。

Bloggerアカウントの作成

テスト目的でBloggerアカウントのサインアップ をしたいと思うかもしれません。BloggerはGoogle Accountsを使用してますので、既にGoogleアカウントを持っている場合、準備完了です。

サンプルコードの実行

このドキュメントで示される全てのサンプルコードを含む完動サンプルクライアントはJavaクライアントライブラリ配布物内のgdata/java/sample/blogger/BloggerClient.javaで利用可能です。構築と実行の手順はサンプルディレクトリのREADME.txt ファイルに含まれています。
サンプルクライアントはBloggerデータAPIの使い方を説明する為に供給されたブログで幾つかの操作を実行します。
自身のコードにこのドキュメントの例を組み込むには次のimportステートメントが必要です:

import com.google.gdata.client.*;
import com.google.gdata.data.*;
import com.google.gdata.util.*;
import java.io.IOException;
import java.net.URL;

 Bloggerサービスへの認証

BloggerデータAPIを使用してパブリックとプライベート両方のフィードにアクセス出来ます。パブリックフィードはいかなる認証も要求しませんが、リードオンリーです。ブログを修正したい場合、クライアントソフトはプライベートフィードをリクエストする前に認証する必要があります。次の2つのアプローチの内、いずれかを使用して認証出来ます: AuthSub プロキシ認証 または ClientLogin ユーザーネーム/パスワード 認証。
一般的なGoogle Data APIでの認証についてのより詳しい情報はauthentication documentationを見てください。
このドキュメントの以降のセクションのサンプルの多くは認証済みGoogleService オブジェクトを作成しているという前提で進めます。

AuthSub プロキシ 認証

AuthSubプロキシ認証はGoogleアカウントで自身のユーザー達を認証することが必要なwebアプリケーションによって使用されます。webサイトオペレータとクライアントコードはBloggerユーザー用のユーザーネームとパスワードにアクセスしません; 代わりに、クライアントは、クライアントが特定のユーザーの代理をすることが出来る特別なAuthSubトークンを取得します。 より詳しい情報についてはAuthSub documentationを見てください。
ユーザーが初めてアプリケーションを訪れた時、ユーザーはまだ認証されていません。この場合、ユーザーが自身のブログへのアクセスリクエストを認証するようにGoogleページへ向かわせる何らかの情報とリンクを表示する必要があります。JavaクライアントライブラリはGoogle ページのURLを生成するための機能を提供しています。以下のコードはAuthSubリクエストページのURLを取得します:

String next = "http://www.example.com/welcome.html";
String scope = "http://www.blogger.com/feeds/";
boolean secure = false;
boolean session = true;
String authSubLogin = AuthSubUtil.getRequestUrl(next, scope, secure, session);

getRequestUrl メソッドは以下のパラメータを使用します (AuthSubRequestハンドラにより使われるクエリパラメータと一致しています):
next
Googleが認証後にユーザーを転送すべきページのURL
scope
アプリケーションがリクエストしているBloggerフィードにアクセスする為のトークンを指示します。 使用されるscope文字列は http://www.blogger.com/feeds/ (当然、URLエンコード済み) です。
secure
クライアントがセキュアトークンをリクエストするかどうかを指示します。
session
返されたトークンがマルチユース(セッション) トークンと交換できるか指示します。 ※マルチユース=複数回繰り返し使用出来る?
上記の例はセキュアトークンをリクエストしていない呼び出しであることを表しています ( secure の値が false)。 結果としてのリクエストURLは以下のようになります:

https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fwww.blogger.com%2Ffeeds%2F&session;=1&secure;=0&next;=http%3A%2F%2Fwww.example.com%2Fwelcome.html

ユーザーはGoogleサイトへのリンクを辿り、自身のGoogleアカウントを認証します。
ユーザーの認証後、AuthSubシステムはAuthSubRequest URLの next クエリパラメータで指定したURLへユーザーを転送します。AuthSubシステムは token クエリパラメータの値として認証トークンをそのURLへ追記します。例えば:

http://www.example.com/welcome.html?token=yourAuthToken

このトークンの値はシングルユースAuthSubトークンを表しています。この例ではsession = trueと指定されているので、  以下のように 、urlFromAuthSub がAuthSubがトークンを追記したURLである場合、このトークンはAuthSubSessionToken サービスを呼び出すことによってAuthSubセッショントークンと交換することが出来ます?:

String token = AuthSubUtil.getTokenFromReply(urlFromAuthSub);
String sessionToken = AuthSubUtil.exchangeForSessionToken(token, null);

つまり、 exchangeForSessionToken メソッドへnull(未登録モード)またはプライベートキー(登録モード)のどちらかに加えてワンタイムユーストークンを渡すとAuthSubインターフェイスはセッショントークンを返します。登録アプリケーションとプライベートキーについてのより詳しい情報はAuthSubドキュメンテーションの”Signing requests“セクションを見てください。  
これでアプリケーションはBloggerとの以降の対話でセッショントークンを使用することが出来ます。Javaクライアントライブラリへ各リクエストで自動的にセッショントークンを送信することを指示するには、GoogleServiceオブジェクトの setAuthSubToken メソッドを呼び出します:

GoogleService.setAuthSubToken(sessionToken, null);

その後、クライアントライブラリは自動的に全てのリクエストと共にトークンを送信します。

ClientLogin ユーザーネーム/パスワード 認証

クライアントがスタンドアローン、シングルユーザー用”インストールされた”クライアント(デスクトップアプリケーションのような)の場合、ClientLogin認証を使ってください。GoogleServiceのオブジェクトのsetUserCredentialsメソッドを呼び出してください。そうすれば以降全てのBloggerとの対話は認証済みとなるでしょう:

GoogleService myService = new GoogleService("blogger", "exampleCo-exampleApp-1");
myService.setUserCredentials("user@example.com", "secretPassword");

上記のコードでは GoogleService コンストラクタへ2つのパラメータを渡しています。最初のパラメータは対話(利用)したいサービスの名前です。2つ目のパラメータはcompanyNameapplicationNameversionID形式のアプリケーションの名前です。
リクエストとレスポンスのサンプルを含むClientLogin認証についてのより詳しい情報はAuthentication for Installed Applicationsドキュメンテーションを見てください。
Note: 与えられたセッションで全てのリクエストで同じトークンを使うには、各Bloggerリクエストで新しいトークンを取得しないでください?
Note: ClientLoginドキュメンテーションで記述されているように、認証リクエストは失敗しCAPTCHA チャレンジを要求するかもしれません。GoogleにCAPTCHA チャレンジの発行と処理をして欲しい場合は、ユーザーを https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (ClientLogin ドキュメンテーションで与えられるCAPTCHA処理URLではなく)へ送ります。

 ブログのリストの取得

BloggerデータAPIは 特定のユーザーのブログをリストにしたフィードを提供します;そのフィードは”メタデータ”として知られています。
次のサンプルコードはメタフィードを取得し各ブログタイトルを出力する為に認証済みGoogleServiceオブジェクトを使います。

public static void printUserBlogs(GoogleService myService)
throws ServiceException, IOException {

// フィードのリクエスト
final URL feedUrl = new URL("http://www.blogger.com/feeds/default/blogs");
Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

// 結果の出力
System.out.println(resultFeed.getTitle().getPlainText());
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
Entry entry = resultFeed.getEntries().get(i);
System.out.println("t" + entry.getTitle().getPlainText());
}
}

getFeed メソッドによって使用されるURLに注意してください。これはデフォルトのメタフィードのURLです; 現在、認証されているユーザーのブログのリストを返します。異なるユーザーのフィードにアクセスするにはメタフィードURLの default の箇所にそのユーザーのIDにします。ユーザーのIDはユーザープロフィールURLの最後にある数字の文字列です。

 ポストの作成

BloggerデータAPIはエントリの下書き(ドラフト)の作成と同様に新しいブログエントリの作成と公開(出版)することを可能にします。
Note: 現在、ポストの著作者をカスタマイズすることはサポートされていません。全ての新しいポストは現在認証されているユーザーによって作成されたかのように見えます?

ブログポストの公開

新しいブログエントリを公開するためにJavaクライアントライブラリを使うことが出来ます。
最初にブログポストを表すEntryオブジェクトを作成します。それからブログポストのタイトル、内容、その他の属性を設定します。最後に、ポストを挿入する為にGoogleServiceオブジェクトを使います。以下は新しいブログポストを公開する方法の例です:

public static Entry createPost(
GoogleService myService, String blogID, String title,
String content, String userName)
throws ServiceException, IOException {
//挿入するエントリの作成
Entry myEntry = new Entry();
myEntry.setTitle(new PlainTextConstruct(title));
myEntry.setContent(new PlainTextConstruct(content));

// サービスへ新しいエントリの挿入を依頼
URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
return myService.insert(postUrl, myEntry);
}

insert メソッドはパラメータとしてサービスのポストURLを使います。その後、Bloggerによって格納されると、メソッドはエントリを返します。 返されたエントリは送信したエントリと同一ですが、ポストIDのような、Bloggerによって追加された様々な要素も含みます。
何らかの理由でリクエストが失敗した場合、Bloggerは異なるステイタスコードを返すかもしれません。ステータスコードについての情報はGoogle Data API protocol reference documentを見てください。

 ドラフトブログポスト(下書き)の作成

ドラフトポストは公開ポストと同じ方法で作成されますが、Entry オブジェクトのdraft属性を設定する必要があります。 ハイライトされた一行を追加することによって上記のようなブログポストをドラフトとして作成できます。

public static Entry createPost(GoogleService myService, String blogId,
String title, String content, String userName,
Boolean isDraft)
throws ServiceException, IOException {
// 挿入するエントリを作成
Entry myEntry = new Entry();
myEntry.setTitle(new PlainTextConstruct(title));
myEntry.setContent(new PlainTextConstruct(content));
myEntry.setDraft(isDraft);

// サービスへ新しいエントリの挿入を依頼
URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
return myService.insert(postUrl, myEntry);
}

ドラフトポストを取得し、draft属性をfalseに設定してからポストを更新することによって既存のドラフトポストを公開ポストに変更出来ます。次の2セクションでポストの取得と更新をカバーします。

 ポストの取得

次のセクションはqueryパラメータがある場合とない場合でのブログポストのリストを取得する方法を説明します。
Blogger 公開フィードのクエリは認証なしで出来ます。したがって setUserCredentials メソッドを呼び出しまたは、公開ブログからポストを取得する前にAuthSub認証をする必要はありません。

 全ブログポストの取得

ユーザーのポストを取得するには、ブログメタフィードを取得する為に使われるgetFeed メソッドと同じものを呼びますが、この時ははブログをポストするフィードURLを送信します:

public static void printAllPosts(
GoogleService myService, String blogId)
throws ServiceException, IOException {
// フィードのリクエスト
URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

// 結果の出力
System.out.println(resultFeed.getTitle().getPlainText());
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
Entry entry = resultFeed.getEntries().get(i);
System.out.println("t" + entry.getTitle().getPlainText());
}
System.out.println();
}

 クエリパラメータを使用したポストの取得

Blogger データ API は、公開された、または与えられた日付範囲内に更新されたブログポストのリクエストのような、指定した判定基準に一致したエントリのセットをリクエストすることを許可します。これを行うには、 Query オブジェクトを作成し、 GoogleService.getQuery メソッドへ渡します。
例えば日付範囲クエリを送信するには、Query オブジェクトのsetPublishedMin と setPublishedMax メソッドを使います。次のコードは与えられたスタートタイムとエンドタイムの間に公開されたブログポスト全てのタイトルを出力します:

public static void printDateRangeQueryResults(
GoogleService myService, String blogId,
DateTime startTime, DateTime endTime)
throws ServiceException, IOException {
//クエリの作成とリクエストの提出
URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
Query myQuery = new Query(feedUrl);
myQuery.setPublishedMin(startTime);
myQuery.setPublishedMax(endTime);
Feed resultFeed = myService.query(myQuery, Feed.class);

// 結果の出力
System.out.println(resultFeed.getTitle().getPlainText() +
" posts between " + startTime + " and " + endTime);
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
Entry entry = resultFeed.getEntries().get(i);
System.out.println("t" + entry.getTitle().getPlainText());
System.out.println("t" + entry.getUpdated().toStringRfc822());
}
System.out.println();
}

 Query オブジェクトはをポストを取得するために使われるポストフィードURLと同じものを使用して構築されているということに注意してください。
Blogger データ API は以下のQuery メソッドをサポートしています:
addCategoryFilter
フィードの結果をフィルタリングするカテゴリ(labelsとしても知られる)を指定します。 例えば http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie Fritz と Laurieの両方のレーベルを伴うエントリが返されます。
setMaxResults
返されるエントリ数の最大値を設定します。
setPublishedMin, setPublishedMax
公開日付の範囲を設定します。
setStartIndex
1ベースのインデックスの取得した結果の最初を設定します?(ページング用)
setUpdatedMin, setUpdatedMax
エントリの更新日付の範囲を設定します。  orderbyパラメータにupdatedがセットされていない場合、これらのパラメータは無視されます。
Note: 現在、orderby クエリパラメータのためのセッターメソッドはありません。しかしながら、これを設定する必要がある場合はQuery.addCustomParameter() メソッドを使うことが出来ます。
クエリパラメータについてのより詳しい情報についてはBlogger Data API Reference Guide と Google Data APIs Reference Guideを見てください。

 ポストの更新

既存のブログポストを更新するには、最初に更新したいエントリを取得し、修正してからupdate メソッドを使用してBloggerへそれを送信します。次のコードはブログエントリのタイトルの修正します。エントリは既にサーバから取得済みと仮定しています。

public static Entry updatePostTitle(
GoogleService myService, Entry entryToUpdate, String newTitle)
throws ServiceException, IOException {
entryToUpdate.setTitle(new PlainTextConstruct(newTitle));
URL editUrl = new URL(entryToUpdate.getEditLink().getHref());
return myService.update(editUrl, entryToUpdate);
}

上記のコードは完全に新しい更新済みのポストを含むEntryを返します。他のプロパティを更新するには、単にupdateを呼び出す前に Entryにそれらをセットします。
Note: 現在、ポストに関連付けられた著作者データの修正はサポートされていません。

 ポストの削除

ポストを削除するには、以下のように GoogleService オブジェクトの delete メソッドへポストの編集URLを渡します:

public static void deletePost(
GoogleService myService, String editLinkHref)
throws ServiceException, IOException {
URL deleteUrl = new URL(editLinkHref);
myService.delete(deleteUrl);
}

 コメント

Blogger データ API はコメントの作成、取得、削除を可能にします。コメントの更新はサポートされていません。 (これはwebインターフェイスでも利用可能ではありません)

コメントの作成

コメントをポストするには、以下のように Entry オブジェクトを作成して挿入します:

public static Entry createComment(
GoogleService myService, String blogID, String postId,
String commentText)
throws ServiceException, IOException {
// コメントフィードURIの構築
String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default";
URL feedUrl = new URL(commentsFeedUri);

// コメント用の新しいエントリの作成とGoogleServiceへの提出
Entry myEntry = new Entry();
myEntry.setContent(new PlainTextConstruct(commentText));
return myService.insert(feedUrl, myEntry);
}

Note: 現在、認証されているユーザーによって所有されるブログへのみコメントのポストが出来ます。
Note:現在、コメントの著作者をカスタマイズすることはサポートされていません。全ての新しいコメントは現在認証されているユーザーによって作成されたかのように見えます?

 コメントの取得

ポストのコメントフィードURLから特定したポストへのコメントを取得することが出来ます:

public static void printAllComments(
GoogleService myService, String blogID, String postId)
throws ServiceException, IOException {
// コメントフィードURIの構築と指定したポストでのコメントのリクエスト
String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default";
URL feedUrl = new URL(commentsFeedUri);
Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

// 結果の表示
System.out.println(resultFeed.getTitle().getPlainText());
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
Entry entry = resultFeed.getEntries().get(i);
System.out.println("t" +
((TextContent) entry.getContent()).getContent().getPlainText());
System.out.println("t" + entry.getUpdated().toStringRfc822());
}
System.out.println();
}

またはブログのコメントフィードURLを使用することによって、全てのポストからコメントを取得することが出来ます:

http://www.blogger.com/feeds/blogID/comments/default

 コメントの削除

コメントを削除するには、以下のように GoogleService オブジェクトのdelete メソッドへコメント編集URLを渡します:

public static void deleteComment(GoogleService myService, String editLinkHref)
throws ServiceException, IOException {
URL deleteUrl = new URL(editLinkHref);
myService.delete(deleteUrl);
}


鎌倉・江ノ島に行った

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


先日、後輩二人と後輩の子供と遊びに行った。

後輩の子は男の子で電車好き。
江ノ電に乗りたいということだったので鎌倉駅に集合。
長谷と江ノ島で降りた。

長谷大仏と長谷観音をまた見てきた。
江ノ島の上の方まで行ったのはもしかすると物心ついてからは初めてか。
自力で登ったけど、エスカーは乗るほどでもないと思った。


子供とは全く関わりがない人生を送っているので初めて知ったが、
三歳児の猛ダッシュこええ_| ̄|○
手をしっかりつないでいないと急に走り出したりするのでハラハラドキドキである。
やはりこのくらいの子は常に手をつないだり注意を払ってあげていないといけないと
いうことを学習したφ(・ω・` )メモメモ…


江ノ電に乗った時も大仏見た時もそれほどはしゃがなかったのでいささか拍子抜けした。
逆にみんなで歩いてる時に抱っこをねだってきたり、寝っ転がったりと構ってもらえる時に
思いっきりはしゃいでいたので、単純に公園で遊んであげたほうが良かったのかなぁ…
名所巡りより公園で遊んであげることφ(・ω・` )メモメモ…


半日だけだけれども眺めていて思ったが、やはり子供は大人の行動・言動をかなり真似してる感じだ。
本質的に意味がわからなくても、適合すると判断したシチュエーションで反応を実行してるのだろうか。
はしゃいでる時はテレビアニメとかの歌とか台詞を真似してたようだけど、あんまりよく聞き取れなかったw


全く流行らなかった逆チョコとかいうやつでもないが後輩x2+後輩の子用に持参していったビッグサンダーとちびサンダーをあげた。(ブラックサンダーは売り切れだった__○_)
自分自身は割って食べるビッグサンダーを丸かじりするさまを見てカルチャーショックΣ(゚∀゚;)
でも考えてみたら自分も子供の頃はそうだったかw
無表情に近い感じで黙々と食べていたので、それほど気に入らなかったのかと思ったが、その後、ママの分もねだっていたから、それなりに気にいったのかな?
布教完了( ・´ω・`) デモアレ1マイ207キロカロリーアルゼ クイスギチャダメダゾ…


今度会った時にもっと遊んであげられるように運動不足を解消しておくべきか。
筋トレはたまにやっているので抱っこ自体は問題なかったが、坂道を登った時にすぐに
息切れしちゃったからな(ノ∀`)

なんやかんやで子供と遊ぶのは面白いなぁ(・∀・)

東海道中膝栗毛

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


十返舎一九作の戯作本です。
内容は弥次郎兵衛と喜多八の江戸~伊勢~京都・大阪間の道中記です。

現代語訳ではないので多少敷居は高いですが古典というほど難しくありません。
脚注等も多く二人のやり取りがメインなので慣れれば何とか読み進められると思います。
時間はかかるとは思いますが随所に現代にも残る表現や方言を見ることが出来るので、
現代語訳では味わえない知識のリンクによる喜びを得られると思います。


基本的な構成要素は弥次喜多のやり取り、狂言や笑い話をベースにした事件、
その事件を詠んだ川柳、各宿道中での名所名物の記述、出会った人々の方言や
衣装の記述といった感じです。


てっきり最後まで東海道を旅するのかと思って読み進めていくと、下巻に入って間もない
五編下から伊勢参宮道へ行ってしまいます。まあ二人の旅の目的は伊勢参りなので
それは当然なのですが、近江辺りの話も読んでみたかったのでちょっと残念です。
そういった点から言うと上巻は東海道旅、下巻は伊勢・京都・大阪編と言えます。


下巻を読み終えてから上巻の発端などを読んでいてふと思い出したのが、
喜多八は元は鼻之助という弥次郎兵衛の若衆だったはずなのに旅の途中では
特にそういったこともなく女を取り合ったりしていてなんか変だなということ。
まあ歳が長じてそういう関係ではなくなったのかと勝手に解釈して読み進めていましたが、
よくよく考えてみると発端は八編の後に出されたものなので後付け設定なのかもしれません。
現代で人気が出た漫画やドラマでよくある外伝とかスピンアウトみたいな感じで。


ちなみに初編での弥次郎兵衛は一人住みの能楽者(怠け者)、喜多八は食客(いそうろう)とありますが、
発端では

弥次郎兵衛
元は駿州府中(今の静岡市)の商人。遊郭や衆道にはまって身代を潰す。
若衆である鼻之助(喜多八)と夜逃げして神田八丁堀へ。
周りの勧めで御末奉公上がりの女・おふつと結婚していたが……

喜多八(鼻之助)
駿州江尻(今の静岡市清水区?)の人。
旅役者の花水多羅四郎(はなみづたらしろう)の弟子で陰間。
江戸に来て元服、喜多八と名乗る。奉公先の商人に気に入られ、
それなりに金に融通が利く状態になるものの……

というような感じになっています。大分受ける印象が異なります。
現代のモラル、思考をもって過去を、しかも戯作本の内容をはかるべきではありませんが、
発端の内容は結構酷いです(ノ∀`) おつぼもおふつも不憫でなりません。
もしも発端が最初に書かれていたのならば、旅の途中で触れられたりしたのでしょうが。


八編の最後で弥次喜多は河内屋四郎兵衛に路銀を用立ててもらい木曽路経由で”めでたく帰国したりける”とあり、東海道膝栗毛は終了します。
この後の二人の道中を描いた続膝栗毛があるようですが岩波文庫では出ておらず、
静岡出版で出されていたものも今は入手困難のようです。

いつか機会があったら続編を読んでみたいものです。