休日に限って起きられない

休日は昼まで寝てしまう人のブログです

結婚しました

こんにちは、おてらです。

タイトルの通り、2020年(令和2年)2月22日に2年と少しお付き合いした方と入籍しました。

ここまで2が並んでいるのは偶然です。

嘘です。

2月22日は覚えやすいよねということでこの日に入籍することになりました。

f:id:otera05:20200226002211j:plain
平成のままでも受理してもらえました

スプラトゥーンのコミュニティで出会った

単刀直入に言いますとスプラトゥーンのコミュニティで出会いました。

ika.queloud.net

このスプラトゥーンのコミュニティ、通称イカトドンに参加したのは2017年の春頃で、まだスプラトゥーン2が発売される前のことでした。

このイカトドンではプライベートマッチやリーグマッチ、サーモンランをして遊ぶことはもちろん、オフ会も活発に行われており、そのオフ会に参加したことで出会いました。

当時一緒にスプラトゥーンをやる友人があまりいなかったこともあり、一緒にスプラトゥーンを楽しめる人がこんなにいるんだという気持ちの方が強かった印象があります。

初めて顔と名前が一致したオフ会では本当にお互いただはじめまして〜くらいの感じで終わっただけでした。

その後なんやかんやあってお付き合いすることになりました。

あっという間に1年経った

時の流れは相対性理論により加速度的に早くなっていくそうですが、あっという間に付き合って1年が経った頃に「趣味も合うし話も合う、何より1年一緒にいて楽しいことがたくさんあった。僕はこの人と結婚するんだろうな」と思い始めました。
明確に結婚を意識し始めたのはその頃からかな。

その前くらいから転職したいとも思っていたし、結婚を視野に入れるなら今のままの収入じゃやっていけないという気持ちもあったため、転職活動に本腰入れたりと割と人生について真面目に考えた1年だったかなとも思います。
※転職については前職の上司のツテもあり、特に苦労することなく転職できましたがそれはまた別のお話。

そんなこんなで結婚

詳細は恥ずかしいので割愛しますが、ありがたいことにプロポーズを承諾していただき、お互いの両親にも挨拶をして結婚を認めていただきました。

入籍当日の朝、自宅のソファでパシャリ。
編集のセンスが絶望的。

f:id:otera05:20200226001626j:plain
私達結婚しました

婚姻届に描かれている素敵な絵は、イカトドンでもお世話になっている815さん(ヤマギシチヒロさん)に描いていただきました。
本当にありがとうございます。

twitter.com

f:id:otera05:20200226003430j:plain
カープオタクとディズニーオタクのイカちゃん

また、僕たち2人が出会うきっかけの場となったイカトドンで結婚の報告をさせてもらった折にはたくさんの方々から祝福の言葉をいただき、本当に温かい人達に囲まれているなぁとしみじみ感じました。
イカトドンのみなさまにも感謝しています。

最後に

これからも夫婦共々よろしくお願いいたします。
2人ともこれからもたくさんゲームするつもりでいますので、引き続き遊んでください。

また、ウチに遊びに来てくれるのも楽しみにしてますので遠慮なく遊びに来てください〜。

Amazon CAPTCHA

体調が悪い話

最近は多少暖かくて真冬の割にはそれなりに過ごしやすい時期が続いていますね。

そんな中、私の体調は最悪です。

昔からお腹が弱い

これは小学生の頃にまで遡ってから現在まで続いてる症状なんですが、私、お腹がとても弱いです。

小学生の頃は今以上に牛乳大好きマンだったのでやばい時は私1人で1Lの牛乳を1日で飲み干してたりもしました。 そりゃ腹も壊すわ。

牛乳を飲みすぎた結果、腸がバグってケツから血が吹き出すいわゆる血便になり、1日中お腹がゴロゴロギュルギュル状態になりました。 もう一歩で入院する羽目になっていましたが、幸運なことに点滴1本で復活しました。恐るべき子供の回復力。

中学生の頃は特に冬の寒い時期なんかはどんなに頑張って厚着してもお腹が冷えるのか、毎日のようにお腹を壊していました。

その度に保健室に逃げ込み、保健の先生から梅肉エキスとやらをもらって一口舐めていました。 この梅肉エキスというものは効果抜群で、お腹の痛みがすぐに消えて楽になったことを今でも鮮明に覚えています。

社会人になってもお腹が弱いのは改善しておらず、6年ほど前に会社の同僚と旅行に行った時に胃腸炎を発症し、旅行期間中美味しいものを一切食べられないという旅行の目的の半分を占める行為を楽しめなかった苦い思い出もあります。

最近は特にひどい

これは割と笑い事ではないんですが、胃腸炎を発症する頻度がかなり上がってきていると感じています。
「あ、胃腸炎だ」って思うきっかけは腹痛よりも消化不良で認知することがほとんどです。
汚い話ですが、食べたものが姿形ほぼそのままでトイレでこんにちはしてます。

「あぁ〜こりゃ胃腸炎だわ」と。

とりあえず最近ではエビオス錠を飲んで腸の状態をなんとか正常に戻そうと頑ばってはいるものの、なかなかすぐに良くはなってくれない様子です。

まじでヤバいと思う瞬間が来た

そんな折、先日夜眠りについて1時間ほど経った時、強烈な腹痛に襲われて目が覚めました。

最初は「あ〜お腹、というか胃のあたりが痛いな〜」くらいで多少我慢できる程度の痛みが5秒くらい続いた後すぐに収まり、またしばらくしたら痛くなる、という痛みの波がある状況でした。

しかし、時間が経つに連れて痛みのレベルがどんどん上がっていき、「うぅ…!」と呻き声を上げるようになる始末。

これは流石にやばいかもしれないと思いつつ、隣で寝ていた(正確に言うと私の呻き声やのたうち回る仕草で寝られていない)彼女に薬をもらい、改善に一縷の望みを託して再度就寝を試みました。 これが確か夜中2:30くらいの出来事。

薬よ早く効いてくれ〜〜〜と祈りながら布団にこもるも、当然そんなにすぐに効いてくれるはずもなく、痛みの波は容赦なく襲いかかります。

それに夜中の3:00前ということもありめちゃくちゃ眠い。眠いけど痛くて寝られない。地獄は私の家にあったんだ。

そこから1時間ほど痛みと眠気のタッグと格闘しながらついにその時が来ました。

まじでもう無理!痛すぎる!!

人生で救急車を呼ぶべきか本気で悩んだ瞬間だった。

冷静な彼女が「救急車を呼ぶべきかどうか迷った時」に連絡すべき救急相談センターに連絡してみては?とアドバイスをくれ、そこに連絡しました。

急な病気やケガをした場合に、「救急車を呼んだほうがいいのかな?」、「今すぐ病院に行ったほうがいいのかな?」など迷った際の相談窓口として、「東京消防庁救急相談センター」を開設しています。 東京消防庁救急相談センターでは、これらの相談に相談医療チーム(医師、看護師、救急隊経験者等の職員)が、24時間年中無休で対応しています。

だそうです。

早速電話してみると、一次受けの人が看護師の方につないでくれて(看護師につなぐだけなら一次受けの人必要なのか?)代わった看護師の方に症状を伝えました。

  • 症状を訴えているのは誰か
  • 年齢
  • いつから発生しているか
  • 詳しい症状
  • 発熱はあるか -> No
  • 吐き気はあるか -> No
  • 歩けるか -> Yes

後半の質問に回答してる時に「あれ?救急車呼ばなくていいルート入ってない?」って思ってましたが、案の定救急車は呼ばずに自力で最寄りの病院に行けという回答でした。

まぁそりゃそうか。

最後に自宅から最寄りの病院をいくつか紹介してもらい、そのままタクシーを自宅前に召喚して大きい病院に直行しました。これが朝5:00の出来事。

病院 〜そして有給へ〜

タクシーを呼んですぐ、会社のSlackに全休させてくださいと投稿。朝5:00。
そしてそそくさと着替えタクシーの到着を待つ。

5分ほどで病院に着いて熱や脈拍を計り、問診に答えていく。

診察室に入った後は同じように症状を詳しく伝え、採血しました。
私、右腕の血管がすごい浮き出やすくてそこに注射器を刺されたわけなんですが、私が今まで見たことない機器で血を抜かれまして、その機器のせいなのか先生も若干装着というかテープでの固定に手間取って、刺してるところを結構グイグイされて「いてていてて」ってなってました。

針をぶっ刺された腕の様子。流石に太すぎません???

f:id:otera05:20200204153602j:plain
閲覧注意(遅い)

その結果、結構血が漏れて私の右腕からそこそこ血が垂れてて先生が慌ててガーゼで拭いてました。 大丈夫かいな。

その後、お腹や下腹部の触診を経て、「血液検査の結果が出るまでの間で点滴を行って、結果次第でCTで画像撮りましょう」という流れになった。 点滴のタイミングでお腹の痛み止めも打ってもらいました。

f:id:otera05:20200204153904j:plain
知らない天井だ

朝6:00くらいから点滴を打ち始めたんですけど、これが思いの外時間がかかり、結局空っぽになるまでやらなかったんですが点滴を外したのは恐らく朝8:00前くらいだった気がします。

ちなみに針を外すときも結構手をグイグイされて

私「あ、いてていてて」
看護師「あ、お腹ですか?」
私「いや、手の方です」
看護師「あ、すみません」

的なやり取りがありました。

血液検査の結果では、お腹の痛みに伴って白血球の数が増加しているものの、そこまで異常な数値ではないとのことでCTでの画像取得はしないことになりました。

何はともあれ、痛み止めを打ってもらったことで痛みはだいぶ良くなったものの(完全になくなってはいない)、夜は痛みでほぼ寝られなかったことで激烈に眠く、こういう状態だったので仕事はお休みさせていただきました。申し訳ない。

また、隣で寝ていたばかりに巻き添えで寝不足にさせてしまった上、病院にもずっと付き添ってくれた彼女には大変感謝しております。ありがとうございます。

まだ痛い

そんな出来事が昨日の夜中〜早朝にかけてあったわけですが、お腹はまだ若干痛いです。
痛みの波が来る頻度はかなり減りましたが来る時は来る。でも痛みはそこまでじゃないので多少は改善していると思います。

ただ、今日出勤途中の電車で頭がぼーっとするし気怠さが増していくしお腹がぐるぐるして気持ち悪いしで、会社には非常に申し訳ないんですが更にお休みをもらいました。

ちなみにまだお腹は気持ち悪い。

初詣に行った時に神様に無病息災をお願いしたんですが、その願いは早くも叶わなかったようです。

どうにかして健康な体を維持できるように努力していきたい所存。
(色んな所からリングフィット再開しろって言われそう)

Golang における時刻の扱い自分用まとめ

最近Goで日付を扱うことが多くその度に毎回フォーマットをググっていたので自分用メモ。

フォーマットの定義文字列が「2006-01-02 15:04:05」なのは分かりやすいっちゃ分かりやすいけど分かりにくいっちゃ分かりにくい。

Goのtimeパッケージのリファレンスタイム(2006年1月2日)は何の日? - Qiita

時刻の扱いまとめ

よく使うのは

  • 文字列をパースしてtime.Time型に変換
  • 時刻(time.Time型)から文字列に変換
  • 時刻の加算

かな。 切り捨てもたまに使う。

package main

import (
    "fmt"
    "time"
)

func main() {
    // 現在時刻の取得
    t := time.Now()
    fmt.Println(t) // 2020-01-28 17:28:45.081013 +0900 JST m=+0.000171794

    // 任意の日時をセット
    t = time.Date(2020, 1, 28, 17, 5, 7, 0, time.Local)
    fmt.Println(t) // 2020-01-28 17:05:07 +0900 JST

    // 文字列をパースしてtime.Time型を生成する
    t, _ = time.Parse("2006-01-02 15:04:05", "2020-01-28 17:04:07")
    fmt.Println(t)         // 2020-01-28 17:04:07 +0000 UTC
    fmt.Println(t.Local()) // 2020-01-29 02:04:07 +0900 JST

    t, _ = time.Parse("2006年01月02日 15時04分05秒", "2020年01月28日 17時04分07秒")
    fmt.Println(t)         // 2020-01-28 17:04:07 +0000 UTC
    fmt.Println(t.Local()) // 2020-01-29 02:04:07 +0900 JST

    // 時刻から文字列を生成する
    t = time.Now()
    fmt.Println(t.Format("2006/01/02"))            // 2020/01/28
    fmt.Println(t.Format("2006-01-02 15:04:05"))   // 2020-01-28 17:28:45
    fmt.Println(t.Format("2006年01月02日 15時04分05秒")) // 2020年01月28日 17時28分45秒

    // 加算
    t = time.Now()
    t = t.AddDate(0, 0, 7)
    fmt.Println(t) // 2020-02-04 17:28:45.081722 +0900 JST

    t = time.Now()
    t = t.Add(time.Duration(60*60*24*7) * time.Second) // 604800秒 = 1週間の加算
    fmt.Println(t)                                     // 2020-02-04 17:28:45.081727 +0900 JST m=+604800.000885424

    // 切り捨て
    t = time.Now()
    fmt.Println(t) // 2020-01-28 17:28:45.081735 +0900 JST m=+0.000893621

    t = t.Truncate(time.Nanosecond)
    fmt.Println(t) // 2020-01-28 17:28:45.081735 +0900 JST

    t = t.Truncate(time.Millisecond)
    fmt.Println(t) // 2020-01-28 17:28:45.081 +0900 JST

    t = t.Truncate(time.Second)
    fmt.Println(t) // 2020-01-28 17:28:45 +0900 JST

    t = t.Truncate(time.Hour)
    fmt.Println(t) // 2020-01-28 17:00:00 +0900 JST
}

今年もよろしくどうぞ

明けましておめでとうございます。 今年もどうぞ宜しくお願いします。

ちなみに、「新年明けましておめでとうございます」は「新年」と「明けまして」が重複しているから誤用では?という声が結構聞かれますが、広く一般に浸透して使用されることから誤用ではない、らしいです。ほーん。

新年の抱負的な

こういうの書いたり宣言しちゃったりするとこれに縛られるし、振り返って実行できてなかった時にゲンナリするのであんまりこういうのは書きたくない派なんですが、一応慣習的にやっておきます。

  1. キャリアアップに繋がることに費やす時間を増やす
  2. 人生において大事な1年になるのでちゃんと向き合う、大切にする
  3. お金のことを考える

あんまり多すぎると面倒なので3つくらいが妥当じゃないですかね?分かんないけど。

少なくとも自分はこれ以上書くと絶対にどれも達成できなくなる自信があるので。

1. キャリアアップに繋がることに費やす時間を増やす

これはまさしくそのとおり。

ぶっちゃけ30過ぎてもゲームやめられないし、やめる必要もないと思ってるんですが、もう少し今後の仕事のキャリアアップについて考えたり行動に移したりする時間を増やした方がいいなと思っています。

去年転職したことも結構人生の中で大きなイベントだったことは間違いないですし、薄々分かってはいましたが転職してから目の当たりにした自分自身のスキルの低さというのも何とかしなきゃという思いは引き続き持っていたいなと。

その上で更に会社から与えられた役割をちゃんとこなせるようにもっともっと仕事に対するプライベートの時間を増やして行こうかなと。

具体的には本読んだりコード書いたり勉強会に参加したりとかかな。(抽象的だね)

2. 人生において大事な1年になるのでちゃんと向き合う、大切にする

これはまぁ何かボカして書いてますがそういうことなのでそういうことなんです。(抽象的)

今までの人生において、何かしなくちゃいけないことやものがある時に優先順位を付けたことは当然あるんですが、あまり守れたことがないんですね。

夏休みの宿題然り、自分で決めた目標然り、会社で設定した目標然り。

やっていくうちに「これやらなきゃいけないの分かってるんだけど多分やらずに終わるだろうな」っていう自覚もあるから更にたちが悪い。

なのでこの目標に関してだけはそういうことがないように表明。というか、ちゃんとしないと迷惑かけるのは自分だけじゃないので。

3. お金のことを考える

30過ぎてますが保険の1つにも入ってないって相当まずいですよね。

そういう意味でのお金のこと、ですね。

貯蓄に関してもそうだし、出費に関してもそうだし、体を壊した時のことだったり、税金に関してもそうなんですが、今まであまり自分が稼いでるお金や使ってるお金、徴収されていく税金なんかについて無頓着だったのでそういうところはそろそろ直した方がいいなと思っています。

一応電気ガス水道ネットなんかの毎月の支払額はスプレッドシートに記録してるんですけど、そんなの猿でもできる時代なのでもう少し踏み込もうと。

特に税金や保険関連ですね。納税はちゃんとしていますが、無知なので。

毎月自動的に別口座にいくらか引き落として貯金(いわゆる自動積立)してるんですが、結局そのお金も困窮した時に引き出して使っちゃってるから積立とは…という状態になっているので、そういうことにならないように計画的に貯蓄できるようにちゃんと生計をしっかりしたい。

ただ、良いものを買う時は妥協しない。結局長く使えるから。これは私のモットー。

終わりに

まぁそんな感じで令和2年も過ごしていきます。

いつまでもゲームし続けられるようにお金はしっかり稼ぐおじさんにならないとね!

1年を振り返ろう

年の瀬ですね。年の瀬くらいは1年を振り返ってみてもいいんじゃないかなと思うミーハーな人間なので振り返ります。

1月

いきなりだけど正直何してたか覚えてない…。
前職で最後の案件を普通にやってましたね。Nuxt.js でサーバレスアプリケーションの開発やってましたけど、今やってるようなしっかりとした設計やコンポーネント思考で開発してなかったので今思えばまだまだきれいに開発できたなと思います。

2月

退職にまつわる諸々の処理をやってた1ヶ月だったかな。
一応最後の案件のお客様にも退職の報告をし、その他のお客様や取引先なんかにも退職の連絡をしてるだけの1ヶ月だったかな。
今思い返してもそんなに2月の思い出というか、何してたかを思い出せないのでそんな感じなんでしょう。

プライベートでは新居で契約してた U-NEXT の無料期間で視聴できた「ゆうべはお楽しみでしたね」に触発されてドラクエ10を購入、沼にハマっていきました(^o^)
本田翼が死ぬほど可愛い。

www.mbs.jp

3月

3月の中旬をもって新卒で入社した会社を退職しました。

最終出勤日にはそれなりに色んな人から感謝の言葉を貰ったりして、「何だかんだこの会社に少しでも貢献できてなのかな〜」と思えました。

有給消化は2週間くらいしかなかったんだけど、その2週間で AWS Loft Tokyo に行ったり割と落ち着いて次の職場(現職)への準備をしてました。

4月

人生初の転職ということもあり、自分にとって忘れられない1年の始まりになりました。

Web系のエンジニアがいっぱいいる組織で働くことも初めてですし、エンジニア主体の組織を目指している会社というのも初めてなので、本当に初めての事づくしでした。

自社サービスの開発に携わることになり、今までの受託開発とはまた違ったプレッシャーを感じました、チームメンバーもいい人たちに恵まれてこの会社で働けるのはとても楽しみだな〜と実感しました。

5月

めでたく30歳になりました。三十路ですね。外見的に若く見られがちなので自分でも30歳という事実に違和感を覚えます。

なんにせよ、世間ではまちがいなくおじさんと呼ばれる世代に踏み込んだので、おじさんらしく仕事もプライベートも頑張らないとなぁと思いました。

仕事の方ではLPを作ってました。自社サービスの開発はどこに行ったって感じですが、その前段階のユーザの趣向を探るためのLPでした。
LPの制作についても webpack + SCSS でコーディング、S3 + Cloudfront でデプロイといった開発で、これも初めてでした。
HTML や CSSフレームワークをそのまま使うだけに留まってたので自分で1からマークアップしていくのは初めてでチームメンバーにめちゃくちゃ負担をかけてしまって申し訳無さを日々感じる1ヶ月でした…。

この辺りから実際にサービスの開発で使う言語を Go にすることが決まったので Go の勉強を開始しました。

6月

仕事では引き続きLP制作。
他にはアーキテクチャを設計してくれたのでその実装について考えたり、実際に開発が始まった時に使う技術の検証とかをやってました。

7月

チームに新たに1人ジョインしてきました。この人がめちゃくちゃいい人且つすごい人で、入社して1ヶ月で会社の賞を獲得するくらいの人でした。

開発も本格的にスタートし、新しくジョインした方が Go の経験者ということもあってコーディングの面でみんなを引っ張っていってくれました。
めちゃくちゃ実装スピードが早くて自分も頑張らないと!という気持ちになりました。やはり出来る人の影響力ってすごいなと。

8月

自社サービスの開発を行う日々。

この辺りの時期はずっと Go でサーバサイドのコードを書いてました。前職でもインフラの設計構築だったり、Webアプリケーションの受託開発を行っていたこともあり、フロントエンドよりもバックエンドやってる方が楽しいなーという気づきを得られました。
別にフロントエンドの開発が嫌いとかそういう訳ではなく、フロントよりバックの方が楽しいと感じる、というだけ。

9月

10月にサービスリリースということもあり、9月は AWS のインフラ構築に力を注いでました。

意外なことに AWS に強い(というかインフラ設計に強い)エンジニアが少なく、VPC とか作ったことない、みたいな人が多かったので、前職でその辺の経験があった自分が VPC の設計を始めとするインフラを構築しました。

これまで LP のコーディングでもバックエンドの開発でも割と足を引っ張る側の立場だったので若干落ち込んだりしてた時期もあったんですが、インフラ構築の部分で多少なりとも貢献できたことで少し回復しましたw

10月

初めて自分が開発に携わったサービスが世にリリースされました。 今までの受託開発はそのお客様の社内サービスであることがメインだったので自社サービスをリリースしたという経験ができたことは単純に嬉しかったです。
ただ、リリースの瞬間はめちゃくちゃ静かにリリースされたのでリリースされたっていう実感はあまりなかったんですがw

リリースしたとはいえ、次の機能追加が決まっているので継続して開発するのは変わらずで、常に走り続けてる感は消えませんでした。
それはそれで自分にとっては悪いことではなかったのでまぁいいかな。

他にはプライベートで箱根に行ってきました。

東京に丸7年住んでいながら一度も箱根に行ったことがなかったし、2年という節目の月だったので小旅行で箱根に行くことにしました。

11月

サーバサイドの開発が一段落した(と言うよりはフロントの開発に力を入れなければいけなくなった)ので自分もフロントエンドの開発に合流。

Nuxt.js + TypeScript での開発で、TypeScript を触るのも初めてでした。
前職最後の案件で Nuxt.js を触ってましたけど、細かにコンポーネントを切ってたり、Atomic Design を採用してパーツも細分化してたりと、同じものとは思えませんでしたw

ただ、細かく切られていたので慣れるまではデータの流れを追うのが大変でした。これどのコンポーネントだ?このインターフェースどこで定義されてるんだ?みたいな。

12月

引き続きフロントエンドの開発がメイン。
だけど最近またサーバサイドの開発も再開したので Go を書く機会も増えた。

TypeScript も静的型付け言語だから書きやすいんだけど、やっぱり Go を書いてる時の方が楽しいと感じるので Go を好きになったようです。

12月は本当にあっという間に過ぎていったなぁ〜〜〜。

振り返って

何か仕事のことしか書いてないけどプライベートも楽しく充実した1年間だったなぁと思います。

スプラトゥーンSNS の面々とは付き合いがもう3年くらいになりますかね。飲みに行ったり我が家に招いたり、いろんな形で接点を持たせてもらって感謝しています。
まぁそんな中でも出会いと別れがあるので寂しく思うこともあったり、何か悪いことしちゃったかなと反省することもあったり、人間関係って本当に難しくて面倒で楽しいですね。

こんな性格してるので「とっつきにくい人」という印象を持たれがちで「あれ?もしかして嫌われてるかな?」って思うことが結構あるんですが、来年はその辺をもう少し何とかしたいなと思う次第です。

仕事でも遊びでもゲームでもリアルでもインターネットでも、みなさんありがとうございました。

来年もどうぞ仲良くしてください。

それでは良いお年を!

ネタバレを悪とする風潮にもやりを覚える

はじめに断っておくと私は完全にネタバレOKの人間です。
しかしだからといってあらゆるネタバレを許容しているわけではなく、ネタバレを好まない人に対する配慮は必要だということも理解しています。

思ってることをとりあえず書き出す

ここ数年で世間がネタバレに対して非常に敏感というかセンシティブになっているように感じます。 最近だとポケモンの新作におけるネタバレや仮面ライダーの新フォームのネタバレなんかがTwitter上で割と白熱してましたかね。

先に述べたようにネタバレはそれを嫌う人に対して一定の配慮は必要だと思いますが、あくまでも「一定の配慮」であって「一切のネタバレをしない」必要はないと思っています。

ネタバレを嫌う人がネタバレを踏んでしまう主な情報源はおそらくTwitterが多いかと思います。

でもそりゃネタバレ踏みますよね?

そもそもTwitterって情報拡散力に優れているわけで、フォローしてる人数が多ければ多いほどフォローしている人自身のツイートや、リツイートなどで意図せず自分が欲しくない情報が流れてくる可能性は非常に高いです。

そのことは恐らく当の本人が一番分かってるはずなのに「Twitter開いたら○○のネタバレ踏んだ!マジ最悪!」とかそういうツイートをする人の多いこと。

もやりを覚えるポイント

そういうツイートを見たときにもやりを感じます。
うまく言語化できるかどうか分かりませんがつらつら書いてみると、「ネタバレ踏んだ!」というツイートに対してはまるでその人が何らかの被害を受けてしまった被害者であるかのようなネガティブな印象を受けます。

そうなると逆に(その人にとっては)ネタバレとなったツイートをした人が加害者であるような印象を受けてしまいます。(あくまでも個人的に、です。)

ネタバレツイートをしてしまった人が「悪いことしたな」「申し訳ないな」という気持ちになってしまうかもしれません。ここでもやりを感じます。

ネタバレツイートをしてしまった人が悪意を持ってツイートしたのならばそれは良くないことではありますが、例えばポケモンを普通にプレイしていて新しいポケモンに出会った喜びをスクショと共にツイートしただけだとしたらそれは糾弾されるべきネタバレツイートなんですかね?

そういったツイートに対して「まだ買ってない人に対して配慮しろ」とか「ネタバレ注意とか書いとけ」とかそれって横暴じゃないですか?

そういう「あらゆるネタバレは悪」とするような最近の風潮が好きじゃないです。

悪意を持ってネタバレをしている場合を除けばなんとか自助努力(Twitterを見ない、ワードミュートするなど)でネタバレを回避できる可能性を上げられますし、悪意のないネタバレを含むツイートをすることは別に問題ないと思ってます。

ネタバレOK勢の考え方

自分がネタバレOKでも普通にコンテンツを楽しめている理由を挙げてみます。

  • 単純に先の展開や人物の背景などが気になる
  • 最終的な展開が分かっているからこそ、そこにどうやって行き着くのかが楽しみ
  • 先に見ていた情報と合致するシーンが来たときに「ついに来るぞ」というワクワクが生まれる

こんな感じかなぁ。 多分ネタバレNG勢はこういったことを許容できないんでしょうけど。(煽ってないです)

まぁ言いたかったことはみんなネタバレに対して過剰に反応しすぎでトゲトゲしすぎじゃない?もっと気楽に楽しくインターネットしようよってことです。

Golang で CSV を生成したい

Golang を使ってて CSV ファイルを生成したいという要件に遭遇したのでその備忘録

結論

gocsvというライブラリで簡単にCSVファイルを生成できた。

package main

import (
    "encoding/csv"
    "io"
    "log"
    "os"

    "golang.org/x/text/encoding/japanese"
    "golang.org/x/text/transform"

    "github.com/gocarina/gocsv"
)

// User is
type User struct {
    ID   string `json:"id" csv:"id"`
    Name string `json:"name" csv:"名前"`
    Age  string `json:"age" csv:"年齢"`
}

func main() {
    users := []*User{}
    users = append(users, &User{ID: "1", Name: "tanaka", Age: "20"})
    users = append(users, &User{ID: "2", Name: "sato", Age: "22"})
    users = append(users, &User{ID: "3", Name: "suzuki", Age: "19"})
    users = append(users, &User{ID: "4", Name: "sasaki"})
    users = append(users, &User{ID: "5", Age: "30"})

    file, err := os.OpenFile("sample.csv", os.O_RDWR|os.O_CREATE, os.ModePerm)
    if err != nil {
        log.Fatalln("Error:", err)
    }
    defer file.Close()

    // UTF-8からShift-JISに変換
    gocsv.SetCSVWriter(func(out io.Writer) *gocsv.SafeCSVWriter {
        writer := csv.NewWriter(transform.NewWriter(out, japanese.ShiftJIS.NewEncoder()))
        return gocsv.NewSafeCSVWriter(writer)
    })

    // CSV書き出し
    gocsv.MarshalFile(&users, file)
}

CSVファイルを実際に開いて見る場合は主にExcelで開くことが多いと思うので、文字コードUTF-8からShift-JISに変換しています。 変換が不要な場合は該当の4行を除外すればそのままUTF-8で出力されます。

ただ、これは実ファイルを生成する方式です。 例えばAPIのエンドポイントにリクエストを送るとCSVファイルがダウンロードされるような場合はわざわざ実ファイルを作る必要がない場合もあります。

その場合は gocsv ではなく csvutil を使えば簡単そう。

package main

import (
    "bytes"
    "io/ioutil"
    "log"
    "net/http"
    "strconv"

    "golang.org/x/text/encoding/japanese"
    "golang.org/x/text/transform"

    "github.com/jszwec/csvutil"
)

type User struct {
    ID   string `json:"id" csv:"id"`
    Name string `json:"name" csv:"名前"`
    Age  string `json:"age" csv:"年齢"`
}

func main() {
    users := []*User{}
    users = append(users, &User{ID: "1", Name: "tanaka", Age: "20"})
    users = append(users, &User{ID: "2", Name: "sato", Age: "22"})
    users = append(users, &User{ID: "3", Name: "suzuki", Age: "19"})
    users = append(users, &User{ID: "4", Name: "sasaki"})
    users = append(users, &User{ID: "5", Age: "30"})

    byteUtf8, err := csvutil.Marshal(&users)
    if err != nil {
        log.Fatalln(err)
    }

    // UTF-8のbyte配列をShift-JISに変換
    byteSjis, err := ioutil.ReadAll(transform.NewReader(bytes.NewReader(byteUtf8), japanese.ShiftJIS.NewEncoder()))
    if err != nil {
        log.Fatalln(err)
    }
    // あとは byteSjis を http のレスポンスボディに突っ込んであげればOK(そのうち追記します) 
}

かなり端折りましたけど、csvutil を使えば簡単に構造体から byte 配列を生成することができます。 あとは Content-Type などを正しく設定すればCSVファイルとしてローカルに保存することができます。 気が向いたら http の処理部分を追記します。