ぷるぷるした直方体

エンジニアの雑記です。My opinions are my ownというやつです

実質的な家賃を計算するツールをRustのwasmで作りました

こちらで公開しています - 実質家賃

3行まとめ + 画像

  • 実質的な家賃計算は面倒なのでツールにした
  • 何となく触りたかったのでRustのwasm_bindgenを使って作ってみた
  • 詳しい人はプルリクください

https://res.cloudinary.com/purucloud/image/upload/t_middle/v1597396943/blog/misc/true-rent-ss-1.png

https://res.cloudinary.com/purucloud/image/upload/t_middle/v1597392871/blog/misc/true-rent-ss-2.png

ツールの背景

家を借りる際の判断基準として大きなものに家賃があります。 一般に「家賃」と表示されている金額に加え、「共益費(管理費)」と表示されている金額を加えたものが月々の支払金額とみなされています。

しかし、実際はその他にも様々な費用が発生します。 代表的なものは礼金(敷引金)、仲介手数料です。 これらは額が大きいので特に重要です。 他にも保証会社手数料、鍵交換費用、固定清掃代金、保険料など様々な分かりにくいコストがかかります。 私は手動で計算していましたが、各部屋でこれをやるのは相当面倒でした。

これらの費用を勘案して「実質的な家賃」を求め、より良いお部屋探しを目指すのが本ツールの目的です。

Motivating Example

例えば、いわゆる「家賃」が5万円、共益費が2,000円という計算しやすいパターンを考えてみましょう。 何も付与されなければ当然毎月52,000円の支払いですが、礼金1か月、仲介手数料1か月、火災保険料が契約時に10,000円、自転車置場が契約時に3,000円、鍵交換費用が契約時に5,000円として2年間住むと、毎月の支払いは56,916円/月になります。 元々の金額と比べ4,916円/月多く払うことになります。

一方、表示上の家賃+共益費が55,000円である別の部屋では、礼金と仲介手数料は0でした。 他の条件が同じ場合、こちらは55,750円/月の支払いとなり、先程の部屋より安くなります。

このように、一見他より安い部屋が他の費用により入れ替わることはザラにあります。 探している部屋数が多いといちいち計算するのも面倒です。

使い方

サイトを見て分かるようになっている……と信じたいです。 一部機能は未開発です。興味がある方はissue/プルリクください。

  • 入力値の復元機能
  • 居住期間を変動させた際の実質家賃をグラフ表示

なお、各項目のiをクリックすると解説コメントが表示されます。 適当に邪推したものなので、詳しい人はこちらもissue/プルリクください。

技術的なところ

ここからはツールの中身の話です。 Githubで公開しているので、そちらと合わせて読むと分かりやすいかもしれません。 また、JS世界とのやり取りをとても簡単に行えるクレートwasm_bindgenドキュメントはこちらです。大半のことはここに書かれています。

本ツールではサーバーを立てる必要もないので、クライアントで完結させstatic siteとして公開することにしました。 Reactでぱぱっと書こうかとも思いましたが、今まで気になっていたものの触っていなかったRustのWebAssembly出力(wasm_bindgen)を試してみることにしました。

今回のWebアプリはフォームがメインである古典的なものです。 パフォーマンスも要らなければロジックもさして複雑ではないため、明らかにwasm向きではないですが、一応実現はできました。 が、JSの世界とのやりとりはかなり苦しいです。 昔ながらのjQueryをいじっている気分になれます。

DOMいじり

まず苦しい点として、DOMをいじるのが大変です。 web_sysクレートがHTMLのidから要素を引っ張ったり、新しい要素を生成したりするのは行ってくれるので低レベルな部分は気にしなくて良いですが、プリミティブな操作なので実際書くと苦行です。 例えば<div class="hoge">fuga</div>parent要素にぶら下げようとすると、次のようなコードになります。

let elem = document.create_element("div")?;
elem.set_attribute("class", "hoge")?;
elem.set_inner_html("fuga");
parent.append_child(&elem)?;

要はJSで一から要素を生成するのと同じですね。 ReactなどではJSXが使えるのでかなり楽ですが、残念ながらRustには現時点でそのようなフレームワークはありません。 マクロ機能があるのでいずれJSXのようなDSLを簡単に使えるクレートが登場すると信じたいですが、そもそも需要があるのかは謎……歯を食いしばって利用例を増やしていきましょう。

自分でDSLやFWを作ると夏休みが潰えて次の夏休みになってしまうので、下記のような「ちょっとだけ楽になる関数」を作ってお茶を濁してみました。 いずれにせよ、コードからどのようなDOMが生成されるかは見難いです。 設計を頑張ったらなんとかなるのかしら。

pub struct HtmlAttr<'a> {
    pub name: &'a str,
    pub value: &'a str,
}

pub fn make_tag(document: &Document, tag_name: &str,
                attr: Vec<HtmlAttr>, inner: Option<&str>,
                parent: Option<&Element>) -> Result<Element, JsValue> {
    let elem = document.create_element(tag_name)?;
    attr.into_iter().map(|a|
        elem.set_attribute(&a.name, &a.value)
    ).collect::<Result<_, _>>()?;
    if let Some(i) = inner {
        elem.set_inner_html(i);
    }
    if let Some(p) = parent {
        p.append_child(&elem)?;
    }
    return Ok(elem);
}

// 利用例
make_tag(&document, "span", vec![
    HtmlAttr { name: "class", value: "font-weight-bold" }
], Some(&self.text), Some(&label))?;

ID管理

DOMの問題に伴い、ID管理が大変です。 昔jQueryで色々やったことのある方はそれを想像してください。 うまいこと設計をして緩和することは出来ますが、ReactやAngularの楽さを考えると落差が凄いです。 こちらも今後に期待です。

イベントハンドラー

JSでは息をするように書けるイベントハンドラーですが、Rustで書くと所有権やライフタイムの都合上きっちりと書くことになります。

具体的にはclone()で必要なオブジェクトを複製しておき、Closureを作ってそれをイベントリスナーに登録した上で、作ったClosureのforget()を使ってリソースリークをさせるという方法で実現されます。

公式サンプルで見るとこのような形です。

    {
        let context = context.clone();
        let pressed = pressed.clone();
        let closure = Closure::wrap(Box::new(move |event: web_sys::MouseEvent| {
            context.begin_path();
            context.move_to(event.offset_x() as f64, event.offset_y() as f64);
            pressed.set(true);
        }) as Box<dyn FnMut(_)>);
        canvas.add_event_listener_with_callback("mousedown", closure.as_ref().unchecked_ref())?;
        closure.forget();
    }

rustwasm.github.io

JSでは気にしていなかった点が明確になって面白いですね。 ところでforget()ってunsafeでは?と疑問に思ったのですが、こちらの記事にわかりやすく理由が説明されていました。

イベントハンドラーの詳細はwasm_bindgenのClosureのページもご覧ください。

rustwasm.github.io

IDEの支援

web_sysは次のような問題があり、intellij-rustおよびrlsでの補完が効きません。 これは開発する上でなかなか辛く、実際コンパイルしてエラーを見る必要があります。 IntelliJがメインなので試してはいませんが、凌ぎたい場合はVSCodeでrust-analyzerのNightlyを使うと動いた、という報告も下記issueにあるのでご確認ください。

テスト

JSの世界とやり取りせずRust内で完結する場合は、いつも通り非常に快適にテストが書けます。 wasm_bindgenが上手くやってくれるので、上手くレイヤーを切ってRustの世界でどれだけ完結させられるかが肝になりそうです。

その他四方山話

  • 英単語はUSの消費者庁のページから拾ってきました。情報がしっかりまとまっていること、ポップなデザインでフレンドリーなのに加え、詐欺への警告もちゃんとしており良いサイトでした。公式のパワー
  • 最近まとまった量のコードを書いていなかったので、モジュールを上手く切れていない感じがします
  • material-uiを使うほどでも無さそうだったので、久々にbootstrapを使ってみました
  • リリース前にはちゃんとclippyを通しましょう
    • ある程度の規模ならCircleCIなどに組み込むので自然と行うはず
  • OSSなWebアプリをリリースする前にやることは地味に多くて大変です。やらなくてもいいものも多いですが……。
    • Githubでリポジトリの公開
    • Netlifyへのデプロイ設定(Github連携)
    • カスタムドメインの設定
    • faviconの設定
    • ogpの設定
    • Google Analyticsの設定

まとめ

プリミティブな処理はwasm_bindgenweb_sysが行ってくれます。 型も細かく用意されているので、JSをそのまま書くよりは楽にWebアプリを作ることができます。 そのためRustのメリットを活かして書くことは可能だと感じましたが、いかんせんこのような古典的なWebアプリだとReactで書いた方が圧倒的に効率が良いでしょう。

WebAssembly自体の用途を考え、パフォーマンスが必要な処理、特にWebGLやWebRTCを使う場合やcanvasへの描画がほとんどな場合などではメリットが多く出てくることでしょう。 機会があればそのようなアプリも作ってみたいものです。

あと家賃はわかりやすくしてください。

追記

後々情報を頂いたり調べたりしていると、WebフレームワークのyewはJSXライクなDSLを提供していたり(Thanks to @n_s_7さん)、

github.com

Mozillaブログに書かれているDodrioがあったりと

hacks.mozilla.org

github.com

既に色々と作られていました。さすがRust。 いずれもproduction用途は想定していない模様ですが、今後が楽しみです。 この辺りを使って書き直してみたり、新しく作ってみたりしたいですね。

十三機兵防衛圏 レビュー

話題になっていたのでやってみました。 ADV3.0という感じでした。 トータルで30時間程度に上手くまとめています。

十三機兵防衛圏 - PS4

十三機兵防衛圏 - PS4

  • 作者:
  • 出版社/メーカー: アトラス
  • 発売日: 2019/11/28
  • メディア: Video Game

総評: +1 (オススメ!)

概要

ADVパートとタワーディフェンスパートが独立して存在しています。 お互いに解放条件が依存しているので両方やることになります。

良かったところ

何よりADVパートのクオリティが高いところです。

ストーリーもグラフィックもサウンドも良質で、さらにシステムがただのADVではなくアクション要素を含んでいます。 かなり複雑なストーリーも、ADVシステムの工夫やキャラクターのモーションでスムーズに読み進められます。 文字と静止画のADVからYU-NOのような凝ったADV2.0が生まれましたが、この作品はADV3.0と言えるだけの違いを持っているでしょう(適当)。

キャラクター13人を少しずつ切り替えて進めることで全体像が分かる、というのも上手い仕掛けです。 通常のADVでは高々5人程度の視点切り替えはありましたが、本作品は13人です。しかもルート途中での細切れな切り替えです。 たいそう複雑なことになりますが、そこはキャラ付けと構成の妙であまり戸惑いはありませんでした。 よく出来ていますね。

良くなかったところ

ストーリーは丁寧なせいか、驚き成分が少なめでした。また、情報開示のタイミングが「勿体ない!」と思った箇所があったり、後半がほぼ解説だけになってしまったりと、惜しいという印象が残りました。

グラフィックはとても良く出来ているのですが、2Dキャラと立ち絵で受ける印象が異なるため違和感がありました。

タワーディフェンスは各々が出来ることが被っているので、結構ワンパターンになってしまいました。 大きな不満は無いですが、各機体で切り札的なものがあると面白かったかも、と思いました。

まとめ

全体としてクオリティが高く、特にADVは特筆すべきものがあります。 ストーリー至上主義の方向けでは無いかもしれませんが、システムやキャラクターの表現はADVとしてやりたかったこと、を体現しているでしょう。 万人にオススメできる作品(CERO C)です。

最近読んだ本のまとめ

ここ最近読んだ本を、だいたい3文のレビューを添えてまとめただけの記事です。 早速行ってみましょう。

三体

大きな話題になった中国のSF小説。 勢いもスケールもあるし作り込みもされていて面白かったです。 3部作の1つ目で他はまだ日本語訳されていないので、続きが楽しみです。

三体

三体

  • 作者:劉 慈欣
  • 出版社/メーカー: 早川書房
  • 発売日: 2019/07/04
  • メディア: Kindle版

東京高級住宅地探訪

戦後から続く西側の高級住宅街にスポットを当て、歴史を分析した本。 読んだ後は実際に町並みを観察してみたくなります。 田園調布や成城、奥沢はすぐ行けるので今度行ってみます。

東京高級住宅地探訪

東京高級住宅地探訪

  • 作者:三浦 展
  • 出版社/メーカー: 晶文社
  • 発売日: 2012/11/16
  • メディア: 単行本

予告された殺人の記録

ノーベル文学賞を取った歴史的サスペンス物。 文化的な共感が無いせいか、いまいち面白さが分かりませんでした。 あと登場人物の名前が覚えられない……。

予告された殺人の記録 (新潮文庫)

予告された殺人の記録 (新潮文庫)

異文化理解力

各国の文化的特徴をカテゴライズし、具体例を添えて対応を書いた作品。 分類に納得感があり分かりやすいので

異文化理解力 ― 相手と自分の真意がわかる ビジネスパーソン必須の教養

異文化理解力 ― 相手と自分の真意がわかる ビジネスパーソン必須の教養

まちカドまぞく

まんがタイムきららキャラットで一押しな作品。 何が良いか明言できないが最高、といった感じです。 どこを切ってもクオリティが高い。

まちカドまぞく 1巻 (まんがタイムKRコミックス)

まちカドまぞく 1巻 (まんがタイムKRコミックス)

  • 作者:伊藤いづも
  • 出版社/メーカー: 芳文社
  • 発売日: 2015/12/04
  • メディア: Kindle版

2020年初頭現在は単行本が5巻まで出ており、それの続きは↓の2019年8月号からです。

最後にして最初のアイドル

SFのような何かです。 勢いがすごくて結構好きです。 パパっと読めるのですが胃もたれします。

最後にして最初のアイドル (ハヤカワ文庫JA)

最後にして最初のアイドル (ハヤカワ文庫JA)

  • 作者:草野 原々
  • 出版社/メーカー: 早川書房
  • 発売日: 2018/01/31
  • メディア: Kindle版

スターストリングスより

メイドインアビスのつくしあきひと先生の短編漫画。 冒険のエッセンスが詰まっています。 グロくないよ(表現上は)!

スターストリングスより

スターストリングスより

  • 作者:つくしあきひと
  • 出版社/メーカー: 竹書房
  • 発売日: 2017/09/30
  • メディア: Kindle版

ところでメイドインアビスの映画、素晴らしかったですね。 祝福されました。

ひなビタ♪公式ガイドブック

KONAMIの音ゲーをやるとIIDX以外にだいたい入ってる、ひなビタのストーリーをまとめた本。 ゲーム自体をやっていても全く気づかないのですが、曲の裏には膨大なストーリーがあったりします。 シーズン1〜3は公式サイトにまとまっているので、まずはここから

ひなビタ♪公式ガイドブック

ひなビタ♪公式ガイドブック

  • 作者:
  • 出版社/メーカー: KADOKAWA/富士見書房
  • 発売日: 2016/04/15
  • メディア: 単行本

武器になる哲学

哲学者や名言をピックアップし、それが現代でどのように活かせるかを書いた本。 哲学というと小難しく感じますが、この本では現代に活きる形で上手く選出が行われています。 Tips的に書かれているので非常に読みやすく、興味はなくともおすすめです。

武器になる哲学 人生を生き抜くための哲学・思想のキーコンセプト50

武器になる哲学 人生を生き抜くための哲学・思想のキーコンセプト50

  • 作者:山口 周
  • 出版社/メーカー: KADOKAWA
  • 発売日: 2018/05/18
  • メディア: 単行本

哲学入門

こちらはやや重めの哲学入門本です。 作者は「ラッセルのパラドックス」で有名なあのラッセル。 内容自体は中々複雑なのですが、論理の簡潔さと繰り返しの多さ、例示が優れており、文学作品としても素晴らしいと感じました。

哲学入門 (ちくま学芸文庫)

哲学入門 (ちくま学芸文庫)

dieselのメモ

所用でdieselを使っているのですが、ドキュメントから探すのが難しかったり、実現できなかったりすることがパッと分からなかったりします。 ということで、本記事は触ってみて気づいたことを書き溜めておくチラ裏です。気が向いたときに追記してゆく予定です。

生SQLの実行

dieselではwindow関数やsubqueryをサポートしていません。 そのため、paginationはsqlを直にいじることで実現しています。

diesel.rs

頻繁に使う記述はこのように作ると良いのですが、とりあえず動かしたい場合にはなかなか手間です。ということで、生SQLを扱う方法を覚えておくと便利です。

生SQLの実行にはsql_queryを使うと、load時にby-nameでマッピングを行ってくれます。 マッピングする先のstructでは、QueryableByNameをderiveしておきます。

#[derive(QueryableByName, Serialize, Debug)]
pub struct LastUpdate {
    #[sql_type = "Datetime"]
    pub dt: chrono::NaiveDateTime,
}
use diesel::sql_query;
use diesel::sql_types::Integer;

sql_query(
r#"
  SELECT x.*, updated_at as dt
  FROM hoge
  LIMIT ?
"#
)
.bind::<Integer, _>(5)
.load::<(Hoge, Rank)>(&*conn)
.expect("cannot execute ....")

association

関連するテーブルを引っ張ってくる場合は、structにderive(Associations)#[belongs_to(XXX)]を付けてbelonging_toでIDを指定して取得できます。 これはWHERE INによる絞り込みが行われます。

docs.diesel.rs

SELECT * FROM hoge
WHERE IN (1,2,3....)

そのため、IDが該当SQLの実行時に決まっている必要があり、subqueryでは実行できません。 2度クエリを実行するため、パフォーマンスが気になる場合は生SQLなどで頑張りましょう。

grouped_by

SQLのgroup_byとは異なり、既にloadしたデータをグルーピングする関数がgrouped_byです。 外部キーでくっつきます。 この後にzipすることで、親データと小データの配列をセットにした構造が得られます。 詳しくは↓で。

docs.diesel.rs

1件取得

普通にfindが使えます。 derive(Identifiable)を付けたstructでloadすること。

GROUP BYした際のselect制限

QueryBuilderにはGROUP BYに現れたカラムのみSELECTで指定できるという、MySQL 8.0のエンジンより強い制約があります。 そのため、下記のような記述は生SQLで書く必要があります(AとBは1:多対応)。

SELECT A.*
FROM B
LEFT JOIN A on B.a_id = A.id
GROUP BY B.A_id

github.com

便利なURLたち

まとめ

diesel楽しい。 気づいたことがあれば追記してゆきます。

お部屋updates - 2019.09

住環境整備リリースノートの第五弾です。 イオンカードのキャンペーン8月末分で物が増えました。

blog.esplo.net

blog.esplo.net

blog.esplo.net

esplo.hatenablog.com

サマリー

  • 大画面(仮想)
  • 入れ替えの季節

新規改善

Oculus Questの導入

言わずとしれた、ワイヤレスVRヘッドセットの最新版。 Beat Saberなどの人気ゲームはもちろん、Webブラウザもあるので大画面でdアニメストアを観たりできます。 ワイヤレスなので、寝っ転がったり筋トレをしながらでもアニメが観られますね。 他のヘッドセットを持っていない人は検討の価値が大いにあります。

www.oculus.com

コーヒーメーカーの導入

今まではフレンチプレスを使ってコーヒーを出していましたが、数か月前に割れてしまいそのままでした。 フレンチプレスを洗うのも地味に面倒だったので、機械を買ってみました。

こちらは紅茶も(一応)作れ、お湯も出せるスグレモノ。 ティファールの代わりに配置したため、あまりスペースも変わらず時間効率を上げることができました。

ボトル兼シェーカーの導入

プロテインやコーヒーをかき混ぜる際は、基本他のことができませんでした。 また、コップに移し替えたりすると、洗い物も増えてしまいます。 そこで、ボトルが電動シェーカーになった商品を買ってみました。 ちなみに、似たような商品が沢山あり、レビューを見ると品質はピンきりのようです。

こちらは(一応)耐熱なので、熱湯を入れても今のところは割れていません。 混ぜている間に他のことができるので、作業効率アップに寄与しています。

おさかなスポンジの導入

妙に評価の高いマーナ おさかなスポンジ。 ちょうど家のスポンジが古くなってきたので交換しました。

マーナ おさかなスポンジ B K170B

マーナ おさかなスポンジ B K170B

確かに泡立ちも良いですし、便利な形です。 かわいいは正義でした。

小さいメタルラックを追加

一般に部屋は狭いので、高さを活かすことは重要です。 ということで、メタルラックを追加しました。

収容力が少し上がりました。

まとめ

キャンペーンに合わせて物資を購入し、面倒だったコーヒー周りを効率化できました。 また、仮想大画面でアニメを観ることができるようになりました。

9月末もキャンペーンがあるので、そこでもまた物資を仕入れるかもしれません。

なお、他にも日用品の買いだめを行っています。 洗剤類はしばらく尽きることはないでしょう。

技術書典7で「アッカーマン関数の計算過程を表示する (その↑) / DDRの足運び最適化問題を解く」を頒布します

9/22に開催される技術書典7にて、 「アッカーマン関数の計算過程を表示する (その↑) / DDRの足運び最適化問題を解く」 というタイトルの本を頒布します。

techbookfest.org

物理本(+電子版)1,000円、電子版のみのカードを500円で頒布予定です。

どんな内容?

二部構成で、第一部は私、第二部はmaton(@automatonix)さんによる投稿です。

第一部「アッカーマン関数の計算過程を表示する (その↑) 」

アッカーマン関数を題材として巨大数や巨大なデータ処理に触れ、Rustによる"アッカーマン関数の計算過程プリンター"を作ります。 その過程で、再帰関数やメモリに乗らない出力と戦う方法(メモ化やスタック使用量の削減、データ構造の工夫)、Test Driven ApproachをRustで実践しつつ進める方法を見てゆきます。

今回は都合上1.5GB程度の出力となりますが、続編では様々な工夫によりTBクラスの出力を捌く予定です。 本書中にアイデアのいくつかを記載していますので、興味のある方はTBクラスに対応したプリンターを作ることも可能です。

第二部「DDRの足運び最適化問題を解く」

DDRの譜面に対して、最小コストの足運びを生成するという問題を解きます。 単純な全探索では候補が多すぎるため、コストの定式化とDPを使って現実的な時間での生成を可能にしています。

足運びに要するコストの算出には多くの要素が絡むため、今回のモデルでは考慮していない事項が存在します。 続編では、より複雑な要素やプレースタイルの違いを考慮したモデルを定式化し、足運びの自動生成を行う予定です。

嬉しいポイント

  • 巨大なデータとの戦い方を学べる
  • 再帰関数との戦い方を学べる
  • Rustプロジェクトの進行、Test Driven Approachが実践できる
  • アッカーマン関数の計算過程が(数GBなら)表示できるようになる
  • 巨大数に詳しくなれる
  • 実プロジェクトに対するDPの適用事例を知ることができる
  • DDRの(機械的な)足運びを出力できるようになる
  • DDRに詳しくなれる
  • 小林銅蟲先生による表紙がキュート

先頭の画像

https://res.cloudinary.com/purucloud/image/upload/v1568567029/blog/techbookfest7/page_0000.jpg

https://res.cloudinary.com/purucloud/image/upload/v1568567035/blog/techbookfest7/page_0003.jpg

https://res.cloudinary.com/purucloud/image/upload/v1568567042/blog/techbookfest7/page_0004.jpg

https://res.cloudinary.com/purucloud/image/upload/v1568567044/blog/techbookfest7/page_0005.jpg

https://res.cloudinary.com/purucloud/image/upload/v1568567044/blog/techbookfest7/page_0006.jpg

作者による自演感想

随分ニッチなジャンルに思えますが、蓋を開けてみるとソフトウェア開発を広範に扱った入門書です。 まずナイーブな実装から始め、出てきた課題を解決するために工夫をしてゆく流れに乗ることで、スムーズに再帰関数・メモリ溢れやDPとの戦い方を学べます。 また、Rustプロジェクトの進め方、Test Driven Approach、課題設定や定式化が示されており、実際のソフトウェア開発を進める上で必要となる要素が散りばめられています。 これらのトピックの題材となっている巨大数やDDRも解説が含まれ、興味が湧くこと請け合いです。

(東京都、直方体)

チェックのお願い

興味を持った方は、ぜひ「サークルをチェックリストに追加する」を押してください。 「当日行って買えばいいやー」と思うかもしれませんが、各サークルはこれ以外に当日の頒布数を予測する術が無いため、用意する数が少なすぎたり多すぎたりして悲しみが生まれます。

techbookfest.org

……とは言っても、今回は既にマスターアップしているため枚数は変えられませんが……。 次回に活かすため、ぜひご協力をお願いします。

当日は

3F い35C でお待ちしております。会場限定のおまけ本があるかも?

https://res.cloudinary.com/purucloud/image/upload/v1568568232/blog/techbookfest7/circle_place.png

立ち読みエリアにも提出予定ですので、そちらで内容を確認することも可能です。

なんとか寝坊しないで辿り着きたいと思います!

お部屋updates - 2019.08

住環境整備リリースノートの第四弾です。残念ながら今月更新された項目はありません。 何故かと言うと、イオンカードのキャンペーンが非常に強力で、キャンペーン期間まで消費を抑えているからです。

8月末は大量に物資を購入する予定なので、次回(9月)は多くの更新が入ると思われます。 乞うご期待。

過去のアップデートはこちら。

blog.esplo.net

blog.esplo.net

esplo.hatenablog.com

お部屋updates - 2019.07

住環境整備リリースノートの第三弾です。一週間ほど家に居なかったりしたこともあり、非常に小さな更新に留まっています。

過去のアップデートはこちら。

blog.esplo.net

esplo.hatenablog.com

サマリー

  • 細々とした修正
  • 消すのも立派なアップデート

課題の改善

ラップトップの電源を右側に集約

今まで左側に挿していたためケーブルに引っかかっていたわけですが、よくよくMBPを見ると右側にもポートがあるではないですか!電源アダプタも右側に集約をし、快適な移動が実現されました。ポートはよく見よう。

カーテンを締めるのに、洗濯バサミではなくマグネットを使用

今まで締まりの悪いカーテンのため、洗濯バサミで下の方を閉じていました。 洗濯バサミを開いて止めるという操作がやや面倒だったため、100均で売っているクリップマグネットを設置し、簡単にカーテンを密着させることができるようになりました。 課題としては、やや磁力が弱いので寄せてあげないといけません。強めの磁石をカーテンに埋め込む、ということをやると良いかもしれませんが、しばらく様子見です。

洗面所の延長タップ問題

本体だけでなくケーブル部分を壁に止めることにより、下方向への力が弱まりかなり落ちにくくなりました。

新規改善

Alexaでクーラーも操作

LS Mini経由で、Alexaに話しかけるとクーラーを付けられるようにしました。あまり暑くない日が続きますが、そろそろ夏なようです。

HDDタワーの削除

増やすだけがアップデートではありません。 今回は、今まで鎮座していたHDDタワー(HDDを複数差し込んでUSB経由でアクセスできるもの)を取り除きました。 これにより、床と押入れの箱を整理できました。

あまり使っていなかったので、内部のデータは整理すると数百GB程度でした。今はDropbox (businessプラン) に配置しています。

DDR用カバンを用意

今までは日常で使っているカバンをDDRに行く際も使っていたのですが、DDRでしか使わない荷物(タオル・ビニール袋・スプレーなど)を詰め替えるのが面倒でした。 今回の更新では、DDR用カバンを用意し、そちらにDDR専用のものを詰めておくことで詰め替え時間を短縮しました。

新・玄武コンの購入

数年間使っていた玄武コンですが、断線したケーブルを無理やり繋いでいたり、足が高いのでメタルラックの溝にハマっていたりといった問題がありました。 まだまだ使えはするのですが、PHOENIX WANも興味があり購入してみました。 快調に動いています。

www.gqlabo.com

カードホルダーの導入

100均でカードホルダーを購入し、会社に関するカードを社員証と合わせて首掛けにしました。 今回は財布から1枚減っただけですが、どんどん集約して分厚い財布を細くしたいところです。

前からの課題

  • ラップトップや本の置き場所が床
  • 机と椅子が邪魔
  • ドライヤーの置き場が低い
  • 冷蔵庫がうるさい

まとめ

今月は小さな変更に留まりました。また夏が来ると課題が増えそうですね。

お部屋updates - 2019.06

住環境整備リリースノートの第二弾です。前回上がった課題を主に解決しました。また、細々とした修正が入っています。

第一弾はこちら。

esplo.hatenablog.com

サマリー

  • 服が整理された
  • 音声操作の幅が広がった
  • ゼルダはいいぞ
  • レイアウト問題と赤外線問題は解決が難しい

課題の改善

衣装ケース(カラーボックス)の配置

「服が散乱しがち」な問題への対応です。

お値段以上なNITORIさんで大きめのカラーボックスを2つ買い、クローゼットに積みました。Tシャツとシャツをそれぞれ入れていますが、手持ちが綺麗に入っておりよい塩梅です。それ以外の服は未だビニール袋に入れていますが、大した量が無いのでそのままでも問題なさそうです。

ちなみに、Tシャツやズボンはレンジャーロールをしています。コンパクトな俵型になり、楽しい気分になれるのでオススメです。

www.youtube.com

小さなメタルラックの配置

「書類の格納場所が無い」問題への対応です。

別に見えていてもいいので、小さめのメタルラックを買い、その上に100均のファイルボックスを置いて整理しました。3段あるうちの1段を使ったので、残りの2段は本などを適当に置いています。2,000円中盤くらいで買えて場所も取らないので、もう2つくらいあっても使えそうです。

ライティングシーンを変える言葉を発見

「ライトコントロールが上手くいかない」問題の解決策が見つかりました。

今まで「Alexa, make the living light (Scene name)」で頑張ろうとしていましたが、各ライティングシーンはデバイスとして認識されているので、「Alexa, turn the light (Scene name)」というシンプルな発話で上手く変更してくれました。かなり楽ちんです。

新規改善

赤外線通信ハブの設置

赤外線を放つ機械を設置しました。スマホアプリをリモコンとして使える他、Alexaと連携して操作することができます。これにより、Alexaに呼びかけてTVの電源を付けたり、暑くなったらクーラーを付けたりすることができます。

幾つか種類がありますが、安くて高機能と言われているLS Mini (2nd Gen)にしました。 一般的な機能に加え、温度や照度、位置情報を使うことができます。

LS Mini 第2世代 スマートホームコントローラー

LS Mini 第2世代 スマートホームコントローラー

実際動かしてみると、地味に面倒なテレビのon/offがリモコン無しで出来るのはとても楽に感じます。 なお、まだ(暑くないので)クーラーは試しておらず、テレビの操作のみを行わせています。 しかしながら、自動化する上では課題が多いです。これは後述します。

Nintendo Switchの設置

LINE Payの還元祭りでバジェットが余ったので、手が滑ってビックカメラ店頭で購入しました。ゼルダはいいぞ。

次のソフトは下記キャンペーンを使って買おうと思っています。Amazon Prime会員ならTwitch PrimeでNintendo Switch Onlineが1年無料なのでお得です(Twitch Prime | Nintendo)。

ec.nintendo.com

延長タップの設置

Macを始めとした変な形をしたプラグ同士がコンフリクトすることがよくありましたが、差込口が回転する便利タップにより解消されました。 しかも6口 + USB付きというスグレモノ。

お値段は張りますが、木目調のオシャレなバージョンもあるので、デザイン重視の方は検討してみて下さい。

また、差込口が1つしかない洗面所には、耐水性の高いタップを設置しました。

パナソニック(Panasonic)?ザ・タップX(安全設計扉・パッキン付) WHA2513WKP

パナソニック(Panasonic)?ザ・タップX(安全設計扉・パッキン付) WHA2513WKP

ホコリ取りの設置

電子機器にホコリが溜まってしまい、拭いてもイマイチ綺麗にならないので、専用のホコリ取りを設置しました。 カラフルでパワフルです。

ダスキン エレクトロンミニ 3色セット

ダスキン エレクトロンミニ 3色セット

コンプレッションウェアの購入

運動強度が上がるらしいので、コンプレッションウェアを試してみました。実際DDRをやって体感できる差があるかは謎です。個人差なので何とも言えません。 とりあえず、案外涼しくてやや疲れにくい気がする、といった感じです。

トイレ掃除

トイレブラシを管理するのは難しいので、ブラシ部分だけ使い捨ての製品を設置しました。 衛生的で精神衛生的にもよろしいスグレモノです。

課題

テレビ操作の自動化が不安定

赤外線スマートリモコンによる操作の自動化はとても便利なのですが、裏を返せばリモコンにできることくらいしか出来ません。

一見問題ないようですが、自動化をする上で問題なのが、現在の状態が分からないで操作する必要がある、ということです。エアコンの電源が付いている時に「エアコンを稼働させる」操作をすると、なんとエアコンの電源が消えます。冪等性が担保される操作が可能なら良いですが、電源ボタンからして1個しかない製品が多いので辛みがあります。

解決策は思い付きません……。しばらく様子見です。

電子機器の密結合

ルーター周りに電子機器が多く、コンセントが不足しがちです。 テレビに繋ぐ必要があるPC/PS4/Switchと、ルーターに繋ぐ必要があるPC/Hueハブが自由なレイアウトを阻害しています。

テレビやPCの位置を基軸としてレイアウトを再検討してみます。

洗面所の延長タップがくっつかない

両面テープを使って棚に貼り付けてみたのですが、すぐ落下します。 コンセントを指す・抜くというのは結構な力が働くため、優しい両面テープではすぐに剥がれてしまいます。 かといって、強力なものだと壁紙にダメージがあるため賃貸では行いにくいです。

両面テープで棚を付け、その上に延長タップを乗せるという回避策を検討しています。

前からの課題

  • ラップトップや本の置き場所が床
  • 机と椅子が邪魔
  • カーテンの締りが悪い
  • ドライヤーの置き場が低い
  • 冷蔵庫がうるさい

今後優先的に取り組むこと

レイアウト問題は根が深いですが、いい配置が浮かんだら取り組む価値はあります。

メタルラックを増やしたり、延長タップを上手く配置したりといった小さな改修が主になりそうです。

まとめ

根が深い課題も出てきました。小さな改修を積み重ねて快適度を上げつつ、大きな課題を潰してゆきたいところです。

クェーサーの謎 宇宙でもっともミステリアスな天体 レビュー

クェーサーというと何を思い浮かべますか?私は☆11です。

最近はプログラミング関連、投資、生活の本しか読んでないなぁ……と思っていたところ、たまたまこの本がAmazonのセールに入っていました。クェーサーが何かは全く知りませんでしたが、宇宙の本なら面白いだろうという雑な考えで購入しました。

総評: +1 (オススメ)

説明が丁寧で、前提知識が無くても面白さを理解することができました。 ともすれば退屈になりがちな現象の説明ですが、ちょいちょい入る「宇宙、デカいやろ?」的なドヤりが退屈を和らげてくれます。 「宇宙の話が何となく好き」で「クェーサーは知らない」という人に向いた一冊だと思います。

クェーサーの謎 宇宙でもっともミステリアスな天体 (ブルーバックス)

クェーサーの謎 宇宙でもっともミステリアスな天体 (ブルーバックス)

概要

謎の天体、クェーサーについての説明が主題です。現時点での研究成果を、天文学の歴史からストーリー仕立てで説明しています。

総じて宇宙が好きな人が書いたんだなぁ、という印象を受ける作品です。(天文学者なので当然ですが、好き度合いが文中から滲み出ているように感じます)。ちょこちょこ話が脱線するのもご愛嬌です。

良いところ

当然ながら、クェーサーとは何かを学ぶことができます。名前は知っていても中身を知らない、数多の音ゲーマーとは一線を画す存在になれること請け合いです。

また、宇宙のスケールの大きさを改めて感じられる話が多く存在し、ワクワクを感じることができます。例えば、「めっちゃ速いガスの速度は1万kmやで」「えー、チョー速いー。時速100kmの車100個分ジャーン」「せやろ。まぁ秒速なんやけどな」「(卒倒)」といった意味のない会話は無く、しれっと「秒速1万kmものスピードで高速運動するガスが……」と書かれており、まさに天文学的数字が飛び交う本になっています。

さらに、読み物として面白く、時に脱線、時に深掘りをしつつクェーサーの謎に迫ってゆくという構成になっています。周辺知識も付きながら読み進められるため、好奇心を満たすにはもってこいな本です。

良くないところ

非常に分かりやすく噛み砕いていると思われますが、それでも内容は難しい箇所が多いです。天文初心者がサラッと読んだだけでは、雰囲気で理解することしかできませんでした。中途半端に間違った内容で説明されるより断然良いですが、何となく消化不良な感じがします。雰囲気の本なのか、しっかりした本なのかが謎でターゲット層が分かりにくいため、最初に少し出てくる数式で挫折する人がいないことを祈るのみです。

まとめ

分かりやすい本なのか分かりにくい本なのかが分からない、という謎に満ちた本ですが、内容は好奇心を呼び起こし、文章も構成もクオリティの高い宇宙本だと言えるでしょう。恐らく、にわか宇宙ファンが読むと一番学びがあります。ガチ宇宙ファンの人はどう感じたのか感想ください。

それにしても宇宙は大きいですね。太陽質量の100万倍とかいう数字がしれっと出てきたりと、なんとも現実味が無いですが現実なようです。ロマンが溢れているので現実に疲れた時に読み返したいです。

お部屋updates - 2019.05

住環境の整備は、効率の良い暮らしをする上で極めて重要です。しかし毎日居るからこそ慣れてしまい、改良すること自体を考えなくなってしまうという問題が度々発生します。この記事シリーズでは、サービスのリリースノートのようにその月の改善点や課題を紹介してゆきます。これを書くことにより、継続的な改良が促されるという寸法です。

初回なのでフォーマットも手探りです。

サマリー

  • 引っ越し後の基本的なセットアップが終わった
  • ラップトップの格納場所が無い
  • 服が散乱しがち
  • スマートホーム化は途上
  • ルンバ-Readyな部屋にしたい

改善したポイント

ドラム式洗濯機の導入

晴れの日を見計らって、洗濯バサミにチマチマ付けて干す……。それがいかに時間を消費し、精神的苦痛を伴うかは想像に難くないでしょう。最近流行りのドラム式洗濯機を導入し、放置するだけで乾いた洗濯物が吐き出されるシステムが生まれました。これにより、1週間に30分程度が節約できると考えられます。

Alexa (Amazon Echo Dot) の導入

実家ではGoogle Homeを置いていましたが、持ってこなかったので気分転換にAmazon Echo Dotにしました。最初はnon-nativeに厳しくイマイチ反応してくれないAlexaたんでしたが、最近はデレてきたのか期待通りに行動してくれることが増えました。自分の発音が良くなった可能性もありますが、いずれにせよ普通は日本語設定にした方が良いでしょう。ちなみに、↓の写真で上に乗っているのはおでかけベベちゃんぬいぐるみであり、Alexaとは一切関係ありません。

https://res.cloudinary.com/purucloud/image/upload/t_HD/v1557839829/blog/misc/echo_dot.jpg

現在のユースケースは電気をコントロール(後述)したり、ななひら曲を垂れ流したりといったことしかしていませんが、赤外線HUBを追加することでテレビやエアコンと連携できます。

Echo Dot  第3世代 - スマートスピーカー with Alexa、チャコール

Echo Dot 第3世代 - スマートスピーカー with Alexa、チャコール

スマートシーリングライトの導入

Hueブリッジと連携して、アプリやAlexaから明るさや色味を調節できるシーリングライトを導入しました。お安いアイリスオーヤマ製のライトを買ってしまいそうですが、取り付け部分が二段になっていないと上手く嵌らないようです。↓のは比較すると値が張りますが、ほぼ全ての取り付けパーツに対応しているので安心です。詳しくはWebサイトで調べたり、家電量販店などでお聞き下さい(ちなみに店頭で買ったら20%近く安かった)。

詰め替えをそのまま吊るすやつを導入

シャンプーやボディソープの詰め替え用を、詰め替えずそのまま吊るすエポックメイキングなプロダクトを導入しました。詰め替え時間の短縮のみならず、浴槽の掃除も楽になるスグレモノです。地味に種類が多く、どれが良いかは謎です。今の所、↓で800gのものを吊るしても落下していません。

詰め替えそのまま 7点セット PS-7S

詰め替えそのまま 7点セット PS-7S

ドでか無香空間の設置

気休めに芳香剤を置いてみました。何かで見かけたドでか無香空間を買って置いてみましたが、想像の倍はデカいです。長期間保つので、こまめに取り替える手間が省けます。インテリアにオススメ。

【まとめ買い】ドでか無香空間 消臭剤 本体 無香料 1800g×2個

【まとめ買い】ドでか無香空間 消臭剤 本体 無香料 1800g×2個

遮光ドレープカーテンへのリプレイス

持ってきたカーテンが光をスムーズに通し、5時台に強制的に目が覚めていました。目が充血してきたので、ニトリで遮光性の高いカーテンを購入しリプレイスしました。逆に朝早くに起きたい時はカーテンを開けて寝ればいい、という発見がありました。

「遮光1級」のものであれば、基本陽の光には負けないので、カーテン選びの参考にしてください。

www.nitori-net.jp

課題

ラップトップや本の置き場所が床

現状ラップトップの住み家が無く、使い終わったら床に置いています。掃除のしやすさを考え、高さのある台や収納しやすいスキマを作りたいところです。

書類の格納場所が無い

普段使わないが保持する必要がある書類などはクローゼットに押し込みたいですが、もうスキマがありません。

服が散乱しがち

現状、服はクローゼットの中にビニール袋でカテゴリ分けして配置していますが、溢れて出てきたり埋もれたりしています。カラーボックスなどで安定した仕分けを行いたいところです。

机と椅子が邪魔

部屋の真ん中に机と椅子があるため、反対側に行く時に邪魔です。充電ケーブルが罠のように伸びていることもあり、油断なりません。これにより1/5程度の床面積が活かしにくい状況になっています。

ライトコントロールが上手くいかない

シーンと呼ばれるライトのプリセットがあるのですが、アプリからは設定できるもののAlexaが上手く認識してくれません。特定の語句と組み合わせないと、正しくシーン設定ができないと思われます。

カーテンの締りが悪い

長さが微妙に短く、真ん中を洗濯バサミなどで締めないと中央にスキマができてしまっています。ヒダヒダがあるので、引っ張れば長さは足りる状況です。洗濯バサミによるオペレーションが微妙に面倒なので、磁石などを縫い付けてみたいところ。

ドライヤーの置き場が低い

毎日使うドライヤーが、洗面下収納にしか置けず、やや移動させるコストがかかります。どこかにぶら下げたいです。

乾燥してる

最近の湿度計を見ると、晴れている日は35%程度など、あまりいい環境ではありませんでした。風邪が中々治らなかった原因かもしれません。

冷蔵庫がうるさい

昔から使っている冷蔵庫ですが、小型のため稼働音がうるさいです。気になって寝られない程ではないですが、静かにできるにこしたことはありません。

理想

エアコンに関するスマートホーム

温度や湿度が一定以上になったらエアコンが勝手に付く、といったスマートな環境を構築したいです。赤外線Hubの導入だけで実現できそうです。

ルンバが楽しく働ける職場

床に直接物を置かないということを徹底し、ルンバ(的なもの)が快適に動けるクリーンな住環境にしたいです。掃除機を掛ける手間が省けます。100均にある底上げプラスチックを活用することで実現できそうです。

今後優先的に取り組むこと

服の管理は毎日影響があることなので、優先的に取り組みたいと思います。うまく合うサイズのカラーボックスを探すのが難しいですが、見つかってしまえば設置するだけなので簡単です。

湿度は重要ですが、季節柄勝手に上がりそうですし、むしろ上がりすぎる問題が出てきそうです。温度上昇もあるため、エアコンをスムーズに付ける仕組みを作ることを優先するのが良さそうです。

まとめ

今までの取り組みと課題をまとめ、次に取り組むことを服とエアコン周りとしました。スマートな家にして楽をしたいところです。まだまだ課題は多いですが、毎月少しずつ改善してゆきたいと思います。

続きたい

mozilla/grcovを使ったRustのテストカバレッジ計測

普段、Rustでのテストカバレッジ計測はどのように行っていますか?

kennytm/cargo-kcovxd009642/tarpaulinを使っているケースが多いと思いますが、公式(?)のmozilla/grcovというツールもあります。これはFirefoxのカバレッジ計測のために始められたプロジェクトであり、今後も開発が安定して継続するだろうと期待できます。実際、頻繁にcommitされているのが見て取れます。

github.com

本記事では、そんなmozilla/grcovを使ったテストカバレッジ計測を簡単に行うシェルスクリプトを作成します。まだ成熟しておらず、しばらくすると使い方が変わっている恐れがありますので、利用する際は各自で確認しましょう。

準備

実行に際して必要なツールを用意します。

  • grcov
    • 本ツールです。cargo install grcovで簡単インストール
  • Nightlyのrust
    • テストカバレッジ計測にはおなじみ、Nightly版が必要です。rustup install nightlyで簡単
  • lcov
    • カバレッジレポートをHTMLにするために使います(genhtml)。Macならbrew install lcovなど

実行

TL;DR

#!/usr/bin/env bash

set -eux

PROJ_NAME=$(cat Cargo.toml | grep -E "^name" | sed -E 's/name[[:space:]]=[[:space:]]"(.*)"/\1/g' | sed -E 's/-/_/g')
rm -rf target/debug/deps/${PROJ_NAME}-*

export CARGO_INCREMENTAL=0
export RUSTFLAGS="-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Zno-landing-pads"

cargo +nightly build --verbose
cargo +nightly test --verbose

grcov ./target/debug/deps -s . -t lcov --llvm --branch --ignore-not-existing --ignore-dir "/*" -o lcov.info
genhtml -o report/ --show-details --highlight --ignore-errors source --legend lcov.info

これをプロジェクトルートで叩くと、report/index.htmlにレポートが現れます。

詳細

grcovのREADME内のtravis版スクリプトを参考にしてシェルスクリプトを作ってゆきます。ゴールは「叩くだけで計測レポートができあがる」ことです。

まず、フラグを確認します。CARGO_INCREMENTALRUSTFLAGSを設定し、計測に適切な設定を行っています。利用ケースによっては変更して下さい。

export CARGO_INCREMENTAL=0
export RUSTFLAGS="-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Zno-landing-pads"

フラグでnightlyの機能を使っているため、+nightlyで利用するchannelを指定します。

cargo +nightly build --verbose
cargo +nightly test --verbose

testが完了したら、ようやくgrcovの出番です。./target/debug/depsを指定しているのが少し意外ですが、GCNA/GCNOファイルはこちらに生成されます。概要はcovで説明されていますので、樹になる方は一読ください。

grcov ./target/debug/deps -s . -t lcov --llvm --branch --ignore-not-existing --ignore-dir "/*" -o lcov.info

-oで指定した箇所に一時ファイルが生成されます。このファイルをHTMLにして一般的な人間に読めるようにします。結果は-oで指定したディレクトリに吐き出されます。

genhtml -o report/ --show-details --highlight --ignore-errors source --legend lcov.info

さて、ここまでの手順だけで上手く行けば良かったのですが、実際に運用すると、コード変更時にエラーが出ることに気づきます。

+ grcov ./target/debug/deps -s . -t lcov --llvm --branch --ignore-not-existing --ignore-dir '/*' -o lcov.info
Error in computing counters:
Unexpected number of edges (in xxx) in xxx

インクリメンタルにしてしまっているのでしょうか。毎回cargo cleanをすると上手く動きますが、依存関係の再ビルドを行うため非常に長い時間がかかり実用的ではありません。原因を掴みかねた(ご存知の方はぜひコメントください)ので、とりあえず下記のように該当のGCNA/GCNOファイルを消すことで対応しました。なお、汎用性を高めるため、PROJ_NAMEは直書きではなくCargo.tomlから取ってきています。

PROJ_NAME=$(cat Cargo.toml | grep -E "^name" | sed -E 's/name[[:space:]]=[[:space:]]"(.*)"/\1/g' | sed -E 's/-/_/g')
rm -rf target/debug/deps/${PROJ_NAME}-*

場合によってはこれでも上手くいかない可能性はあるので、ビルド速度が重要でない場合は毎度cargo cleanを事前に走らせるのが良いでしょう。

これで完成です。以上をまとめると、TL;DRで示したシェルスクリプトになります。

まとめ

mozilla/grcovを使ってテストカバレッジを計測するスクリプトを作製しました。変更した場合も依存関係の再ビルドは行われないので、実用的なスピードで計測ができると考えられます。grcovは盛んに開発が行われているので、今後も追いかけてゆきたいです。

シンガポール観光 レビュー

1週間ほどシンガポールを観光してきました。初の訪問でしたが、近代都市だけあって非常に便利で戸惑いは少なめでした。観光地も多く短時間で移動できるため、観光旅行先として優れている……結果、日本人が非常に多かったです。

下記はそんなシンガポールのレビュー……というより紹介です。なお、今回は国の右側辺りしか巡っていないため、左側は全く分かりません。また、いつも通り適当なカテゴリー分けで記載してゆきます。

評価: +2 (超オススメ!)

  • 昔ながらの風景と現代的な風景の両方が楽しめる
  • 移動が楽
  • 多種多様なな飲食店
  • 治安も良い

5日ほどあれば、主要な箇所は巡ることができます。海外感を味わいつつ、無駄な苦労があまり無いのでコスパが高い旅行先と言えるでしょう。

続きを読む

Braid レビュー

何となくパズルゲーを探していたところ、発見したこの作品。 鍵を探してステージを進むということでみすばるサーカスのトラウマが蘇りそうでしたが、なんとかクリアしました。

store.steampowered.com

総評: +1 (オススメ!)

概要

「時を戻す」という、かなり特殊な操作ができるのが最大の特徴です。 本作品はその特殊性を活かし、高クオリティのパズルを生み出すことに成功しています。

なお、The Witnessというひたすらパズルを解くゲームと同じ作者です。私はこちらを先に知りました。

良かったところ

何より、肝心のパズルのクオリティが非常に高いです。 様々なギミックがありますが、誰しも1つは「良く出来てんなぁ〜」とナナチになること請け合いです。 「時を戻す操作」というアイディアだけに慢心せず、面白くしようという気概を感じます。

また、リソースを活用した世界観の構築が上手いです。 BGMの曲調ももちろんですが、ギミックや操作に併せて再生速度が変化したり、なんとも言えない背景の色合いなどが相まって独特な雰囲気を作り上げています。

加えて、進行の自由度が高いので、好きなステージから攻略でき、詰みにくい仕様になっています。優しい。

良くなかったところ

唐突に新しい操作や知識を要求されることが時折発生します。 数としては少ないのですが、もう少し誘導があると良かったと感じました。

特殊なパズルなのでしょうがないですが、ボリュームはやや少なめです。 その分クオリティが高いものが揃っているので、これは一長一短ですね。

注意点

英語でやるとかなり難解であり、考察余地の多いストーリーが難しさに拍車をかけます。 自信が無い場合は、Steamの設定を変えて日本語で起動しましょう。

まとめ

特殊な操作に根付いた高クオリティのパズルが楽しめる作品でした。 パズルゲームを探している場合は真っ先に当たってみましょう。