Flutter for Web触ってみた

Google I/Oパリピしてる人を見ながら一人でコード書いてます

Q. えっ?FlutterがWeb対応したの

This week, we are releasing the first technical preview of Flutter for the web.

参考

developers.googleblog.com

flutter.dev

Example

やったことはNkzn氏と同じなので略。今回もぼっち参加なので会場の隅で同じく喜んでた qiita.com

適当にいじくる

migration_guide.mdというものがあったのでtemplateをWeb向けに書き直してみた。 github.com

createして

flutter create mizuki_page
cd mizuki_page/

importを書き換えて

import 'package:flutter/material.dart';

import 'package:flutter_web/material.dart';

yaml書き換えて

vim pubspec.yaml

pubspec_yamlをWeb向けにいじる。今回はPreviewなので dependency_overrides 使ってpreviewのpackageを使う。
書き換えた内容以下の通り。ほぼSampleと同じ

dependencies:
  flutter_web: any
  flutter_web_ui: any
  # あとでMobile用にBuildするため
  flutter:
    sdk: flutter

dev_dependencies:
  build_runner: ^1.2.2
  build_web_compilers: ^1.1.0
  test: ^1.3.4

dependency_overrides:
  flutter_web:
    git:
      url: https://github.com/flutter/flutter_web
      path: packages/flutter_web
  flutter_web_ui:
    git:
      url: https://github.com/flutter/flutter_web
      path: packages/flutter_web_ui

依存package入れて

pub get

webディレクトリを作り中に index.html, main.dart を作って

<!DOCTYPE html>
<head>
  <meta charset="UTF-8">
  <title>File in the web</title>
  <script defer src="main.dart.js" type="application/javascript"></script>
</head>
<body>
</body>
</html>
import 'package:flutter_web_ui/ui.dart' as ui;
import 'package:mizuki_page/main.dart' as app;

main() async {
  await ui.webOnlyInitializePlatform();
  app.main();
}

実行

webdev serve

結果

できた
f:id:mizukisonoko:20190508171152p:plain:w300
Fabのアイコンが表示されないけどモバイルと同じように表示できた。 当然Webなのでデカ表示もできる。

f:id:mizukisonoko:20190508171718p:plain:w600

このままAndroidようにBuildしたい

lib/main.dartのimportをもとに戻す。

import 'package:flutter/material.dart';
//import 'package:flutter_web/material.dart';

ここに関して、両方を同時にImportする事はできない。

the tech preview Flutter for web is developed in a separate namespace. So, as of today an existing mobile Flutter application will not run on the web without changes.

結果

Launching lib/main.dart on Pixel 3 in debug mode...
Initializing gradle...
Resolving dependencies...
Running Gradle task 'assembleDebug'...
Unhandled exception:
FileSystemException(uri=org-dartlang-untranslatable-uri:dart%3Ahtml; message=StandardFileSystem only supports file:* and data:* URIs)
#0      StandardFileSystem.entityForUri (package:front_end/src/api_prototype/standard_file_system.dart:33:7)
#1      asFileUri (package:vm/kernel_front_end.dart:589:37)
<asynchronous suspension>
#2      FrontendCompiler._outputDependenciesDelta (package:vm/frontend_server.dart:391:39)
<asynchronous suspension>
#3      FrontendCompiler.compile (package:vm/frontend_server.dart:365:13)
<asynchronous suspension>
#4      _FlutterFrontendCompiler.compile (package:frontend_server/server.dart:31:22)
<asynchronous suspension>
#5      starter (package:frontend_server/server.dart:133:27)
<asynchronous suspension>
#6      main (file:///b/s/w/ir/k/src/flutter/frontend_server/bin/starter.dart:8:30)
<asynchronous suspension>
#7      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:298:32)
#8      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:171:12)

Compiler failed on */flutter/mizuki_page/lib/main.dart
Finished with error: Gradle task assembleDebug failed with exit code 1

謎のエラーが出た。なお、webディレクトリを消しても、pubspec.yamlを戻しても同じく出た……

同じ症例のIssueを見つけたが github.com
Office Hour行ってみる

感想

あっさりとtemplateをWebで表示できてよかった。
内容がmigration_guide.mdの焼き直しなのはこの記事を書き終える80%あたりでこのmdを見つけてしまったからである。
正直 migration_guide.md 読めば事足りると思う。
ホットリロードは同じく便利
速く改変なしてWeb / mobileへビルドできるようになってほしい……

circleciのorbを使でECR/ECSにgoアプリをデプロイするやつのテンプレ書いた

成果物

github.com

aws-ecr/build_and_push_image

指定したDockerfileからイメージをECRのpushするOrb、使う前は毎回Loginしたりしていたので非常に便利になった。 https://circleci.com/orbs/registry/orb/circleci/aws-ecr

ポイント

  • aws-ecr/build_and_push_image にBuildしたバイナリデータを渡す
    今回、一つ前のjobでバイナリを作成しコンテナに詰める設計なので、生成バイナリをこのJobに持ってこないとDocker imageを作成できない。 しかしaws-ecrではstep実行を行うことができないので restore_cache が使えない……。
    対応として attach-workspace という設定項目を使った。
    attach-workspaceとはtrueにするとworkspaceをこのJobsで使う事ができる項目らしい。
    今回はbuildのjobを /go/src/github.com/MizukiSonoko/goapp-template/ で行ったので aws-ecr/build_and_push_image に合わせるために移動させた。(ここの設定を間違えていたので空のdocker imageをpushしてて辛かった)
    あとは persist_to_workspaceを使って /home/circleci/project/ を永続化すると次のJobでも使えるようになる。
      - run:
          name: move an artifact
          command: |
            mkdir /home/circleci/project/
            mv /go/src/github.com/MizukiSonoko/goapp-template/build /home/circleci/project/build
      - persist_to_workspace:
          root: /home/circleci/project/
          paths:
            - .
      - aws-ecr/build_and_push_image:
          account-url: AWS_ECR_ACCOUNT_URL
          repo: '<repo name>'
          tag: '${CIRCLE_SHA1}'
          dockerfile: .circleci/Dockerfile
          attach-workspace: true
          filters:
            branches:
              only:
                - master
          requires:
            - base

これで生成バイナリを含んだコンテナをpushできた。

  • AWS_ECR_ACCOUNT_URLを環境変数ぽくしない 最初、AWS_ECR_ACCOUNT_URLを ${AWS_ECR_ACCOUNT_URL} と書いたら以下のエラーが出た。
#!/bin/sh -eo pipefail
# Error calling workflow: 'build_and_deploy'
# Error calling job: 'aws-ecr/build_and_push_image'
# Type error for argument account-url: expected type: env_var_name, actual value: \"${AWS_ECR_ACCOUNT_URL}\" (type string)
# 
# -------
# Warning: This configuration was auto-generated to show you the message above.
# Don't rerun this job. Rerunning will have no effect.
false

なのでAWS_ECR_ACCOUNT_URLのまま書こう。

Ref

Persist_to_workspace Hanging - 2.0 Support - CircleCI Discuss

aws-ecs/deploy-service-update

あまりにシンプルだったのでメモがない

感想

Orb初めて触ったが項目が少ないので良い。

GitHub appメモ

羽計歩香というアプリを作った

developer.github.com

jwtのTokenを作るgoのコード

package main

import (
    "fmt"
    jwt "github.com/dgrijalva/jwt-go"
    "io/ioutil"
    "time"
)

func main() {
    key, err := ioutil.ReadFile("private-key.pem")
    if err != nil {
        panic(err)
    }
    privateKey, err := jwt.ParseRSAPrivateKeyFromPEM(key)
    if err != nil {
        panic(err)
    }

    t := jwt.New(jwt.SigningMethodRS256)
    t.Claims = jwt.MapClaims{
        "iat": time.Now().Unix(),
        "exp": time.Now().Add(time.Minute * 10).Unix(), // 最大10分
        "iss": <自分のIDを入れる>,
    }
    token, err := t.SignedString(privateKey)
    fmt.Printf("curl -i -H \"Authorization: Bearer %s\" -H \"Accept: application/vnd.github.machine-man-preview+json\" https://api.github.com/app", token)
}
$ eval $(go run jwt.go)

成功するといろいろ帰ってくる

HTTP/1.1 200 OK
Date: Wed, 10 Apr 2019 12:15:17 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 1473
Server: GitHub.com
Status: 200 OK
Cache-Control: public, max-age=60, s-maxage=60
Vary: Accept
X-GitHub-Media-Type: github.machine-man-preview; format=json
Access-Control-Allow-Origin: *
...
{
  "id": **,
  "owner": {
    "login": "MizukiSonoko",
    ... 
  },
  "name": "羽計歩香go benchmark bot",
  "description": "Share benchmark result",
  "permissions": {
    "metadata": "read"
  },
  "events": [
    "repository"
  ]
}

access_tokenを取得するコード

package main

import (
    "fmt"
    jwt "github.com/dgrijalva/jwt-go"
    "io/ioutil"
    "time"
)

func main() {
    key, err := ioutil.ReadFile("private-key.pem")
    if err != nil {
        panic(err)
    }
    privateKey, err := jwt.ParseRSAPrivateKeyFromPEM(key)
    if err != nil {
        panic(err)
    }

    t := jwt.New(jwt.SigningMethodRS256)
    t.Claims = jwt.MapClaims{
        "iat": time.Now().Unix(),
        "exp": time.Now().Add(time.Minute * 10).Unix(), // 最大10分
        "iss": <自分のIDを入れる>,
    }

    token, err := t.SignedString(privateKey)
    fmt.Printf(
        "curl -i -X POST -H \"Authorization: Bearer %s\" -H \"Accept: application/vnd.github.machine-man-preview+json\" https://api.github.com/app/installations/%d/access_tokens",
        token,
        <自分のinstallations_id>)
}

実行

$ eval $(go run token.go)

成功するとTokenが帰ってくる

HTTP/1.1 201 Created
Date: Wed, 10 Apr 2019 13:16:40 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 101
Server: GitHub.com
Status: 201 Created
Cache-Control: public, max-age=60, s-maxage=60
X-GitHub-Media-Type: github.machine-man-preview; format=json
...

{
  "token": "v1.***",
  "expires_at": "2019-04-10T14:16:40Z"
}

石垣島旅行(1)

石垣島に来た

行く理由

  • 寒い
  • 卒論の時期に沖縄に行く流れ
  • SFC修行

行くまで


初のプレミアムエコノミー、とても高い……
周りに 「全然高くないっすよ〜w往復2万7千ぐらいでした〜w」と言いふらしていたが、
Skyコインを使っていたので本当は 往復6万7千 だった。ほんま高い。


日本酒があった。美味しい。


飛行機が微妙に見える。


これすき。今の所今年トップ。島根行きたくなった。


美味しい軽食が出た。思ったより軽食だった。 シャンパンも出た。


足りなかったのでホタテの雑炊?的なものをの食べた。熱かった

論文を書いてた

那覇空港

那覇空港で乗り換え。
そしてすぐに石垣島へ向けて飛行機が飛んだ。
空いていたので3列を一人で座われてよかった。

ついた

バスに40分ぐらいのって市内に来た。真っ暗だった。
ホテルについてせっかくなので何かを食べようと思い食べログ(有料会員である)で近くのお店に行った。
自分の一人旅行はどれだけQoLを高められるかに注力するので使えるものは使う。食べログは最高。

tabelog.com


マグロの店なのでまずは刺し身。おいしい


カキフライ。おいしい


石垣島地ビール。甘かった

  www.jalan.net ここに泊まった。受付の人がとても優しかった。また利用したい。

二日目


朝食が異常に豪華だった。ゴーヤチャンプルが美味しかった。


いい感じのモール


買ったもの。
泡盛ゼリーと生ちんすこうは珍しくて買った。6個入りとかだとお土産になったのだが……、無いので自分用。
マンゴージュースは友人にすごい好きな人がいるので、試しに買った。今まで本当に美味しいマンゴージュースに出会ったことがないので期待。

ある程度見て、離脱。離島ターミナルに行ったが、いい感じのレストランがなかったので、また市内に戻る。
食べログで見つけたラーメン屋に行くことにした。八重山そばに期待。
tabelog.com


本当に美味しい。さっぱりしていてスープがどんどん進む。


ジューシーと言うらしい。雑炊がなまったものだとか。
蕎麦のお供に、と書いてあったが想像以上に多かった。美味しかったので完食できた。


石垣島地ビール(2)。黒ビール。
Not good not bad.


街中でハイビスカスを見つけた。ここは南なのだ。


港。ここは八重山列島というらしく、 八重 という単語がよく目に入る。会津に住んでいるので謎の親近感を勝手に覚える。
桜は関係ない。

竹富島

オススメされた竹富島に向かう
今回はじゃらん遊び・体験 を初めて利用した。宿泊施設の予約しかしてこなかったが、じゃらんは旅系なら何でもやってくれるらしい。
www.jalan.net

船で移動。10分ぐらい。
ついたら観光センター?の人が迎えに来てくれた。バスに乗ってそのまま水牛車乗り場に。


水牛車にゆられる。ゆらゆらしていてとても良いし、ガイドさんの説明が聞けてよかった。
最後に三線の演奏があって最高になった。


ありがとう。重かったと思う。


町並み。教科書で見た沖縄や。 


海。透明感があってガラスみたい。人もそんなにいないので静か。


展望台。瓦屋根がたくさんある。

散歩途中に。 tabelog.com


食べ過ぎでは?このマンゴーは美味しい。


猫と一緒に論文を書く。人懐っこく、足に乗ってきた。


地図。次回はカイジ浜に行こう。

ナイトツアー

アクティブなことはしたくないが、なにかしたい。そんな時こんなの見つけた。
www.jalan.net 星見るのええやん。

最初は自分以外全員団体でもう終わったと思ったが以外に最高だった。星は曇で見れなかった。
次回も申し込みたい。星を見るために。


ヤシの木。ナメクジがいっぱい。


はな。ウニみたいですき。


ハイビスカス。


ヤドカリ。岩場にたくさんいた。


ヤシガニ。このツアーは参加者の運に左右されるらしく、ヤシガニが見れない時もあるらしい。
自分は運がとても良いので大きいヤシガニを見れた。良かった。
夜のジャングル観光は小学生の頃の宿泊学習的なのを思い出せたので最高だった。

ホテル

www.jalan.net

今までいろいろなアメニティを見てきたが泡盛飲み放題のホテルは初めてだった。

僕はやっぱ 玉の露八重泉 かな〜wやっぱw

明日は本土。
程よくToDoを残せたと思う。

次行きたいところ

tabelog.com 閉まってた。悲しい

東京の良いスーパー銭湯 / 温泉

個人的な東京の良いスーパー銭湯 / 温泉のまとめ。

前提条件

新宿を基軸として、いくらで行けるのかを考える。

おふろの王様大井町

大井町店 | おふろの王様
- 価格(平): 1,250円
- 価格(休): 1,550円
+ 新宿 -> 大井町: 片道371円

☆☆☆★★: 星3

まぁまぁ良い。新宿からだと基本りんかい線直通で行くので割高感があるのと、結構混んでいるので時間を考えないといけない。 寝ころび湯 があるので、これを目当てに行く。 駅から近いので、天気に左右されずに行けるのは良い。 風呂の種類に対して価格は少し高い。深夜滞在はやめたほうがいいと思う。 あとタオルは込。

京王高尾山温泉 / 極楽湯

www.takaosan-onsen.jp

☆☆☆★★: 星3

温泉は良い。ただ、新宿から遠すぎる。これは旅行。京王線特急に乗って山奥に行く。 温泉は森の匂いがしていて最高。檜の湯など、種類もある。観光地。 駅に直結しており、館内に時刻表があるのが嬉しいのと始発なので絶対に座れるので帰りは非常に楽。 価格は距離に対してお得感がすごい。 体力がある人は高尾山に登るのと組み合わせると良さそう。 タオルは別料金。フェイスタオルで150円、バスタオル/フェイスタオルで250円。

高井戸天然温泉 美しの湯

utsukushi-yu.com

  • 価格(平): 900円
  • 価格(休): 1,200円
  • 新宿 -(丸ノ内線)-> 荻窪 -(バス)->高井戸東三丁目 : 片道(195+216)円 または
  • 高井戸 -(京王)->京王新宿: 片道 154円

☆☆☆☆★: 星4

近くで手頃に行けるのと、温泉が良い。うまく時間を調整して京王線で行ったほうがおすすめ。 温泉は森の匂いがしていて最高。露天風呂が東京なのに森を感じることができてとても良かった。 プールもあるので体を動かして、温泉ルートもできそう。 タオルは別料金。フェイスタオルで60円、バスタオルは110円。

さがみ湖温泉 うるり

さがみ湖リゾート プレジャーフォレスト/神奈川県相模湖の遊園地

  • 価格(平): 1,000円
  • 価格(休): 1,080円
  • 新宿 -(京王線)-> 高尾 -(JR中央線)-> 相模湖 -(バス)->: 片道(381+195+ 195)円 または
  • 新宿 -(中央)-> 相模湖 -(バス)->: 片道 972+195円

☆☆☆☆☆: 星5

スーパー銭湯ではないが最高。1時間で行ける旅行。最高。 温泉は美しの湯に比べて格段に森の匂いがしていて最高。鳥や虫の音が聞こえ、草が風に揺れる音が聞こえる。 これは、月1で言ったほうがいい。人生を豊かにしてくれる。 終電だけ意識すればなんとかなる。 タオルは込。

花小金井店 | おふろの王様

花小金井店 | おふろの王様

  • 価格(平): 960円 (会員になると880円!)
  • 価格(休): 1,160円 (会員になると1,080円!)
  • 新宿-(西武新宿)-> 花小金井: 片道 267円

☆☆☆☆☆: 星5

キングは最高。 静かな場所にあるので都会にいることを忘れる。

宮前平源泉湯けむりの庄

www.yukemurinosato.com

食事が意味不明に安く、旅館みたいなのが出てきてよかった。 駅から近いのでとても良い。 タオルは込。

☆☆☆☆☆: 星5

ToDo

SAKURA, さやの湯は最近行ってないのでもう一度行ってから追加する テルマー湯は高い。

開発する時に心がけているもの

はじめに

この記事は闇の 魔術に対する防衛術 Advent Calendar 2018 の 12/9 の記事です。 qiita.com 遅れてすみません。皆Qiitaに書いてるのに別のところに書いてしまいすみません。

※これは個人的に心に留めているメモです。 時と場合によって最適解ではないし、最適解を見つけていくほうが良いと思う。

いきさつ

開発を行っているとよく魔法のせいなのか虚無になる事がある。
手を動かしてコードを書いてるが 頭が動いていない、未来が見えない、虚無、虚無、虚無等々……、吸魂鬼でもいるのかな?アズカバンかな?

そういう時に以下の事を心に留めて設計をすると吸魂鬼が寄り付かず
心が守られた開発ができるかもしれない……(しらんけど)

たいてい柴田さんと話している中で出てきたものなので柴田さんに感謝です。

yshibata.blog.so-net.ne.jp

吸魂鬼とは

地上を歩く(実際には滑っているが、便宜上このように表現)生物の中で最も忌まわしきものの1つと言われており、人間の心から発せられる幸福・歓喜などの感情を感知し、それを吸い取って自身の糧とする。その影響力は凄まじく、吸魂鬼が周囲にいるだけで人間は活力を失ってしまう。特に、ハリー・ポッターのように過去に悲惨な記憶を持つ者ほど、吸魂鬼の影響を受けやすい。 ただし、吸い取れるのは前述の感情のみで、それ以外の感情(妄執など)は吸い取れない。人間ほど感情が複雑でないためか動物の感情も吸い取れないうえに目が見えないため(眼窩は存在するが目玉がない)、動物もどきが動物に変身してしまうと感情を吸い取れなくなる。 映画では吸魂鬼が姿を見せると周囲の気温が下がり、ガラスについた水滴や池などが凍りつき草花は枯れてしまう。 吸魂鬼に向かって「守護霊の呪文(パトローナス・チャーム)」を使用すると、吸魂鬼を追い払える。また、ルーピン曰く、鬱になったときはチョコレートを食べると気分が良くなる。

wikipediaより引用

つまり近くにいるだけで心が壊れ、虚無になるやつ。絶対自分の周りにいる。

Expecto Patronum!

Interfaceを考えるときは以下の質問を自分にする

  • そのAPI誰が使うの?
  • そのAPI、設計者都合じゃない?(使ってるライブラリが**を必要としているから等)
  • そのAPI使う人はなぜ使うの?(他のAPIがこうあればそのAPIいらなくない?)
  • そのAPI使うときの引数は正しい?(その引数はClient持ってなくない?)

脳死Create を生やしたから Delete を生やすなんてするとたまにそこに吸魂鬼が住み着く。 少なくとも存在理由を答えられないInterfaceは極力控えよう。Interfaceが増えるとその分 正しい振る舞いをする事を保証する物が増えるのでテストが増える。ドキュメントも増える。
テスト/ドキュメントを書かないと数日後に吸魂鬼が住み着くぞ

テストは書く

それはそうなんだが守護霊(テスト)がいる環境での開発の感想が書きたい
テストが有るとね、Methodが、安心感?絶対に問題ないとわかっていると感じて光って見える。 マジExpecto Patronum。想定内の挙動しかしないのでレゴブロックを積み上げる気持ちで開発できる。
守護霊に守られてる感じがする。安らぎ
なにか変更があったときもE2Eテストが通ったら安心してDeployできる、マジExpecto Patronum。
もう変更なんて怖くない、だって僕には守護霊(テスト)があるから……

本当にテストが書かれているシステムのコードは開発がレゴブロックを組むみたいに安らかにかけて良かった。

エラーが見つかったときはエラーを確認する

エラーを再現するTestを書く(必ず落ちる) -> 修正する -> Testが通ることを確認する 先にProductionのコードを修正するとエラーが本当に修正されたかわからない。
落ちるテスト -> 通るテスト の流れがあるとバグ部分のテストができてるので安心。
エラーを直した、と思ったら通らない の繰り返しになってる -> 吸魂鬼が住み着いてる

E2Eはなるべく早く取り掛かる。優先度を高くする

消耗しつつUnitテスト書いても最終的にE2Eが通らないと意味がないのでなるべく早く取り掛かったほうが良い
E2E -> Unit -> E2E -> Unit
E2Eが全て通ればProductionとしてはある程度問題ないと思うので、E2Eでカバレッジを取りつつ、 どうしてもE2Eでカバーできないケースに対してUnitテストを書くと良いと思う。
CodeCovの犬 となりホワイトボックステストを消耗しつつ書いている -> 吸魂鬼が住み着いてる

CodeCovに振り回されてはいけない、時には勇気を持って赤くする

赤を恐れるあまり、絶対発生しないテストケースを書いていないか?書いていたら 吸魂鬼が住みつき始める
他の層でValidationしていて、こちらの層では絶対発生しないケース(ドキュメントにも書いてある)をテストしようと 複雑な条件整備とテストケースを作りつつ、CodeCovの赤を緑にしようとしてると無意味なテストが量産される。
虚無になり書いたコードが意味がなかった時はとてもつらい。

名前有るもの理由を考える

この世には様々なものが妬み嫌われていたりする。 しかし、大抵の嫌われている物には名前があり、作者は価値を感じて作ったと思う。 なので、一概に否定せず、何故その結果になったかを考えると世界に優しくなれる。 世界に優しくなろう。 吸魂鬼が寄り付かない

まとめ

コレは私の心の中のPatronumなので自分のPatronumを見つけていこう。 プロダクトに吸魂鬼が住み着いていなくても、上のレイヤーに吸魂鬼が住み着いていて全てが崩壊する場合もあるよ。
本当はFinTech界隈の吸魂鬼事情についてかk

東京家無生活

目的

Serverlessが流行っているので僕は Houselessやw
3,4月社宅に住んでおり、0円で東京に住んでいた。その結果家にお金を払うことにためらいを覚えてしまい、 家を持たずに東京に居ることを考えた。これはその記録メモである

前提

東京で住む場合、月10万~12万かかるとして
1日 3333円 ~ 4000円
以内に収めると良いなぁという感じ。

5/1 ~ 5/31

住居的なものに対する出費総額
50790円

活用したもの

ホテル

オフィスが西新宿にあるので、歌舞伎町のカプセルホテルをよく使う。出社時間が徒歩10分程度なので楽
以下のホテルをよく使う

新宿区役所前カプセルホテル

3900円 ~ 2800円
capsuleinn.com
コンセントが付いているので良かった。少し割高な時もある。 個人的に宿泊料は日曜->月曜に高くなるイメージある。

カプセルホテル新宿510

2,900円
capsule510.jp
カプセル内にコンセントがない場合もあるので注意。チェックアウトが 12時なのでゆったりできる。
800円 で洗濯物を洗濯してくれるのが嬉しい。普通に設置してある洗濯機を使った場合でも最終的に 500円ぐらいかかってしまうし 洗濯機を確認しに行くコストを考えると頼んだほうがいいと思った。

カプセルランド湯島

2900円
【公式】カプセルランド湯島
安いのと安定感がある。学部のときからいつも使っている地味に良い場所。
ここは都営大江戸線、千代田線、銀座線、日比谷線、JR山手線の駅が近くにあるので便利。 後述の東武鉄道会津行を使う場合、ここに宿泊し北千住へ千代田線で乗っていく場合が多い。

上野ステーションホステルオリエンタル

2500円
台東区・上野|上野ステーションホステル
外国人観光客向けな感じのカプセルホテル。
安い。清潔。畳+布団とこれは良い。
御徒町と上野の間にあるのでホテルまでの道のりはうるさいが中は落ち着いている。 チェックアウトが12時までなのでゆっくりできて良い

温泉 & 銭湯

ホテルに泊まる場合は大浴場があったりするので上の出費の中に含まれているが オフィスに泊まる場合は銭湯を利用する。

羽衣湯

460円 + 150円(シャンプー類)
羽衣湯 : 渋谷区 東京銭湯マップ
住宅地にある銭湯。わりと広く、種類が豊富。1:30まで空いているので深夜まで働いている人に優しい

万年湯

460円
万年湯 : 新宿区 東京銭湯マップ
新大久保の喧騒のなかにあるモダンな銭湯。高温湯が本当に熱い。 フェイスタオルを貸し出してたり、シャンプー類が備え付けられていたりとありがたい。

清水湯

460円
南青山 清水湯 : 港区 東京銭湯マップ
表参道にある、とてもきれいな銭湯。
副都心線原宿駅から歩いていける距離なので良い。

お風呂の王様 大井町

1250円
大井町店 | おふろの王様
銭湯から見ると割高だが、露天風呂があったりと豪華。

メンズサウナこりこり

1300円 90分コースのみ利用
cori-cori.jp
24時間開いてるので3時とかにいけるのは嬉しい。 歌舞伎町の中にあるが想像以上に普通だったので良かった。

会津地方

自分は実家が会津にあり、実は会津大学大学院生だったりするので会津によく帰る。
実家はありがたいことに住むことに宿泊費を払わなくていいので良い。

新幹線を使う場合

オフィスが新宿にあるのでケチるとかの前に大宮で乗り換えたほうが早くなった。
学割を使うことで少し安くなる。
- 特急 2590円
- 乗車券 4300円
=> 6890円
両方この場合だと13,780円なので3300で割ると4.18である。なので5泊以上会津に滞在すると東京で宿泊するよりお得になる。

東武鉄道+野岩鉄道+会津鉄道

6600円 上の方法で帰ると大宮から新幹線に乗らなくてはいけなくなり、座席に座れなくなる可能性があるのと、 学割を忘れた場合割引がないのでそういうときはこっちの手段で帰る。 当然時間がかかるし、新幹線との差が少ないので、会津から東京に行く場合は使わないほうがいいと思う。

オフィス

0円 オフィスで開発をして、夜を過ごす場合が結構ある。 最初はオフィスに泊まれば次の日は6600円使える!とか思っていたが最終的にオフィスに泊まることが増えた。

その他

ありがたい友人宅に転がり込んだりした。

よく使うサイト

東京銭湯

【公式】東京銭湯/東京都浴場組合 | 東京銭湯の最新情報をお届け 東京の銭湯情報がまとまっている。Mapが便利。

ANAマイレージモール

www.ana.co.jp マイレージ会員なのでじゃらんで予約するときはここを経由で予約している。 ハワイ行きの特典航空券ぐらいは交換できるぐらいに溜まってた。

まとめ

出費が 50790円 と以外に抑えられた。オフィス等が多かったのと会津に帰った日数が結構あったのが要因だと思う。 ネットカフェとか使いたいと思っていたが、カプセルホテルが安いのと設備的にしっかりしているのでなかなかネットカフェを使う場面にならなかった。 銭湯は共通価格なのでとても良い。 キャンプとか取り入れていきたい気持ち 最後に転がり込ませてくれた友人やオフィスに感謝。

追記

上野ステーションホステルオリエンタルを追加