感情的ドリル

Ruby県でRuby書いてるドルオタ

esa.ioお誕生日おめでとうブログ

esa.ioはいいぞ

このブログの下書きはすべてesa.ioを用いられています。

願望

私はしがない同人サークルの一員なのでオンリーイベントを楽しみにしていました。いやマジで開催されるとは思ってなかったけど。(オンリーイベントかどうかはわからない)

esa 生誕5周年記念パーティー(\( ⁰⊖⁰)/) - connpass 今日の夜開催されていることでしょう。島根県民はこう…魂と…ブログを飛ばす…。(泣いてる)

よいところ

仕事でいろいろなサービスに触れてきて、ナレッジ共有サービスもWikiも触ってはいたんだけど、一番ピンときたのがesa.io。いいバランスでカジュアルだと思う。堅苦しいのが良ければWordなどいかがですか?

まあesa.ioの誕生を祝いほめたたえる記事なのでよいところを書いていきましょう。私はesa.ioの新参オタクなので浅いところから書いていきたい。

たのしい

楽しいのはいいこと。何が楽しいのかってこう わからん 言語化できない。人もサービスも楽しいので楽しい。触ればわかる。
好きなところを明確にしていくと楽しさが伝わるかと思いますので分けていきますね。どんどん行きましょう。

かわいい

esa.ioのトリめっちゃ可愛いですよね。かわいい。かわいいは正義
地方イベントに行くたびに新しい装いになるのほんと好き。ステッカー集めちゃう(集めている)。

書き味がいい

ただのマークダウンエディタに何を言っているのかっていう話なんですが書き味がいい。いやもう本当に書き味がいい。言語化したい。分からん。書き味がいい。WEBのノートに書いている気持ちになる。
これはマークダウン記法が染みついている人間の感想。書きなれてない人はScrapboxのほうが好きだと思う。
マークダウンの改行ルールの半角スペース2つとかいうルールは要らない。楽しい。いやこれはマークダウンエンジンの問題だとは思うけどとにかく書いたとおりに表示されて思った通りに書けるってのは意外とオンラインで体験できることではないし楽しいことだし最高。

問い合わせのレスポンスが早い

経験則だと10分以内に返事がある。
ほかのサービスはどうだか知らないんだけど、右下のお問合せフォームから問い合わせると速攻で返事が来ており体験がよい。これはリアルでも何度か中の人に「レス早くて大好き」って言ってるので継続されると思う。
「よっし問い合わせるか~」「問い合わせたぞ~」「いや~まだ返事来てないよn・・・ある~~~?!?!」という気持ちになり楽しい。

Twitterで捕捉される

大体中の人(taea🐿(@ken_c_lo)さん | Twitter)と公式アカウント(esa_io(@esa_io) | Twitter)に捕捉される。Twitterでの承認欲求が高いTwitter廃人としては「esaのここがいい~」みたいなのを呟くと捕捉されるので楽しい。

グッズで課金できる

help/esa.io グッズSHOP - docs.esa.io
esa.ioにはグッズがあるんですよ~~~!!!!オタク好きでしょ?好きでしょ?私は好き。
手軽なステッカーから定番のTシャツ、珍しいところだとサコッシュとかトートバッグとか。スマホケースもある。
手帳型スマホケースはないので欲しい。
余談だけど手帳型スマホケースはiPhone系とAndroid系に対応しなくてはならないので大変そう。私はiPhoneです。これは自己主張です。

たのしそう

esa.ioを作っているのは2人のエンジニアと1人のデザイナーという認識なんだけど、みんなでぬいぐるみ作ったりドローンで飛ばしたりしていて大変に楽しそう。中の人がたのしそうだとこっちも楽しい。ワイワイ。お誕生日おめでとう。

(このワイワイとかトノコトとか、半角カナの発言がじんわり浸透してコンテンツのイメージになっているの見ていて面白いので続けてほしい #トノコト #ダイスキ)

わるいところ

日々引っかかるところはあるんだけど問い合わせたら直ってしまう。これはひそかに温めていた(?)クレーム集です。
多分すぐ直ってしまうんだろうなあ。そういうとこめっちゃ好きです。

たくさんの画像に弱い

古き良き手順書みたいなノリでインストール手順などのスクショを何も考えずに貼り付けていくとプレビュー位置が迷子になる。もはやクレーム。

カテゴリが深くなるとトリが飛ぶ

トリがパタパタしているのは読み込み中の時なのでかわいいなあと思っている。かわいい。トリが飛んでるなあ~~~とか考えているうちに読み込みが終わる。

用途

ちなみに、普段何に使っているのかというとこんな感じ。

一人日報

会社で契約しているチームにワンダーランド(カテゴリ)を作ってそこで一人で日報を書いている。なんかワンダーランドが伝染したらしくて恐れ多いなあって思った。

ブログの下書き

はてなブログに投げる記事をesaで書いている。便利。
WIPでも書いていくサービスの姿勢に合わせると、下書きを量産しやすい。あと、WIPのやつはまだ投稿してないんだなってビジュアル的にもわかりやすくていい。

f:id:ayakufe:20190510110802p:plain
wipの様子

(日報内)TODOリスト

日報内でこんな感じでTODOを仕込んでおけば次の日やることがわかって便利。

f:id:ayakufe:20190510110822g:plain
こんな感じ(本当はもっと雑)

おいわい

中の人がたのしそう&自分たちの作ったものを愛している姿勢が伝わってくるコンテンツって長生きすると思っていて、というのも作者が「Aって作品別にそこまで好きじゃないし思い入れもないんですよね…」とか発言してしまうと作品の受け手は悲しくなってしまう。
個人的には、esa.ioは普段使うWEBサービスという範疇を超えてリアルに侵食してきている、中の人込みで「楽しいコンテンツ」になってきている。ふしぎ。
だがしかしesa.ioというコンテンツ(正しくはWEBサービス)は中の人がesaの鳥を育てたりぬいぐるみにしたりネイルにしたりと様々な「たのしい」を発信していて受け手も楽しい。たのしい!
お誕生日おめでとうございます!今年はぼっちesaでも課金していきます。

RubyKaigi2019に行った #エモリハウス

RubyKaigi参加レポート、登壇者でもヘルパーでもなんでもない人間のレポートなんぞ読んでも得られるものはないと思うので書きたいことだけ書く。

まとめ

  • エモリハウスはたのしい
    • エモリハウスの知名度が酒に偏っていて笑うしかなかった
      • 「エモリハウスなんですよ~」というと以下のパターンになる
        • 「あ~お酒」
        • 「今年は何人?」「17人です」「多いね!」
    • お酒おいしかった
    • 私は生酒を持ち込んで自爆しました
  • ご飯が美味しい
  • Karaokeは楽しい

Day 0

島根から特急スーパーおき新山口新山口から新幹線で博多、博多から宿へ直行した。
正確には、直行しようとしたら近くのもつ鍋屋に行くことになった。

Karaokeいくの?!」「あんずちゃんが連れ込んだの?」と桐生あんずの同類であると認識され一番入り口から近いうえに二段ベッドではない部屋になった。この判断は正しかった。

Day 1

ちゃんと朝からKeynoteを聞いた。ちゃんと聞いただけで「ほえ~」とか言ってておわり。感想を抱け。
Matzが「こっち(壇上)からそっち(観客)よくみえないんだよね」と言っておりとある役者さんのことを思い出した。

その後はふらふらしたり野球盤で三振したり(というかサードゴロなのに2回目3回目とバッドを振らせてもらったことに気づいて呆然としている)屋台に並んだりした。このあたりは人と行動したり。
思い出したらお腹が減ってきた。
午後も興味のある話を聞いたりして、あとはブースを回ってスタンプを集めたりステッカーをあつめたり、esaノベルティの前で待ち構える @ken_c_loさんと遭遇してきゃいきゃいしていた。
マルイ地下の日本酒がうまい店に連れ込まれて沈没。その後エモリハウスで自分の持ち込んだ酒を飲み自爆しアイドルとか引っ越しとかの話をしていた形跡はあるが記憶はない。

Day 2

破滅している某氏を除いて集合写真を撮った。 (私の名前はTwitter上炬燵です)
RubyKaigi2019に参加して、エモリハウスを企画して、WTMKyushuに参加した

Keynoteスルーしちゃった。よくないね。この日はふらふら歩きまわったり博多を散歩したり宿近くの文具屋エモくない?!??と写真をとってフォロワーに送り付けたりなどしていた。
たまたまたどり着いたコインランドリーがきれいだった。
CSVが早くなった旨の漫談も聞いた。相変わらずさらっとすげーこと言ってるなあ、とか思う。あと人酔いした。
うどんが美味しかったと同居人(エモリハウス勢は同居人でいいのか?)に教えてもらい五島うどんを食べに行く。屋台は最高。美味しかった。
agilewareさんのドリンクアップからおすすめのラーメン屋(定食屋になっていた)、Karaokeへ行き、ヒトカラをしたり刀使ノ巫女を見ろと叫んだりした。3時くらいまで粘ったがアイマス部屋にこもった桐生あんずは出てこなかったので一人で帰るなどした。

大体の知り合いはこの日にコンプした。

Day 3

遊んでばっかりだなって思うけどその通りなので仕方ない。
いろんな人と話すのを目的としていたので、3日目は(スピーカーの人たちには申し訳ないけど)ブースをめぐって興味ある話を聞いたり話をしたり話をしたりしていた。

Day 4

朝から酒を進められる生活。朝飲酒っていいなあって思った(飲んだ)。

朝適当に起きて博多駅ぶらついて帰った。

所感

食生活

ジャンキーに無事戻りました。あと普段はそんなに酒飲まないです。

おまけ

楽しい同室組です

esa

布教に成功した

キーボード

ピンク軸から離れると沼が始まる

こころみ

自分の名刺とアイコンのシールを作って遊びに行こう~~~と思ってそれぞれ100枚ずつ作って配り歩いたので満足しました。Rubyよりもpecoが好きな感じのあれです。peco知らないって人が多くて結構びっくりした。楽しいし楽なのでぜひどうぞ。

each_with_indexとeach.with_index

people = %w(高橋 田中 谷口)
 
 idx = 0
 people.each do |person|
   puts "#{idx}: #{person}"
   idx += 1
 end
 #=> 0: 高橋
 #=> 1: 田中
 #=> 2: 谷口
 
 people.each_with_index do |person, idx|
   puts "#{idx}: #{person}"
 end
 #=> 0: 高橋
 #=> 1: 田中
 #=> 2: 谷口
 
 people.each.with_index(0) do |person, idx|
   puts "#{idx}: #{person}"
 end
 #=> 0: 高橋
 #=> 1: 田中
 #=> 2: 谷口
 
 people.each.with_index(5) do |person, idx|
   puts "#{idx}: #{person}"
 end
 #=> 5: 高橋
 #=> 6: 田中
 #=> 7: 谷口

each_with_indexはブロック変数の2個目に0から始まる添え字を突っ込む。冒頭の例、each内でidxという変数をこねくり回すのと同じ動きだ。 each.with_index(start)は、ブロック変数の2個目に任意の数値から始まる添え字を突っ込む。0を指定すれば0からカウントするし、5を指定すれば5からカウントする。

Time#to_sのフォーマット

よく使うフォーマットを定義する

アプリケーション内で Time.new.to_s したときのフォーマットを指定できる。 対象としては、TimeクラスとDateクラス。   created_at.strftime('%Y/%m/%d %H:%M')みたいなヘルパを大量に定義している場合、まとめて定義してしまったほうがいい。   定義したら、READMEなりナレッジなりに明記して周知すること。  

 

定義先

config/initializers/time_formats.rbなどに定義するとよさそう。 余談だけど、Rails5からconfig/application.rbにごちゃごちゃ書くのは非推奨になったので、アプリケーションに関連する定義は config/initializers/*.rbに切り出すのが良い。

定義例

 

# date = Time.local(2009,12,24,15,30,27)

Time::DATE_FORMATS[:default] = '%Y/%m/%d %H:%M' # "2009/12/24 15:30" 
Time::DATE_FORMATS[:datetime] = "%H:%M %d-%b-%Y" # date.to_s(:datetime) ----> 15:30 24-Dec-2009
Time::DATE_FORMATS[:date] = "%d-%b-%Y" # date.to_s(:date) ----> 24-Dec-2009
Time::DATE_FORMATS[:time] = "%H:%M" # date.to_s(:time) ----> 15:30
Time::DATE_FORMATS[:google] = "%Y-%m-%d %H:%M:%S" # date.to_s(:google) ----> 2009-12-24 15:30:27

# In rails, output of a date field uses Date::DATE_FORMATS[:default]
Date::DATE_FORMATS[:default] = Time::DATE_FORMATS[:date]

# To display the current date and time in all the formats in your current environment:
Time::DATE_FORMATS.keys.each{|k| puts [k,Date.today.to_s(k)].join(':- ')}
Time::DATE_FORMATS.keys.each{|k| puts [k,Time.now.to_s(k)].join(':- ')}

# date.to_s(:date) #=> "2018年4月1日(日)"
Time::DATE_FORMATS[:date] = ->(t) {
t.strftime("%Y年%-m月%-d日(#{%w(日 月 火 水 木 金 土)[t.wday]}")
}

 

参考

[日付/時間フォーマットのデフォルトを設定] (https://qiita.com/Vit-Symty/items/399c77d1fd681b77d593)

reggieb/time_formats.rb

ActiveStorageでファイルダウンロードに制限をかける

まとめ

ActiveStorage::BlobsController の該当アクションを上書きする

コード例

devise入りなので user_signed_in? とか current_user とか使ってるけど、そこは良しなに読み替えてほしい

# config/routes.rb
get "/blobs/:signed_id/*filename" => "blobs#show", as: :authenticated_blob_path
# application_helper.rb
 module ApplicationHelper
   def authenticated_blob_path(blob, **options)
     route_for(:authenticated_blob_path, blob.signed_id, blob.filename, options)
   end
 end
# brobs_controller.rb
class BlobsController < ActiveStorage::BlobsController
   def show
     unless user_signed_in?
       flash[:alert] = "ログインしてね"
       redirect_to root_path and return
     end
     super
   end
 end
# view/xx.slim
- link_to "ダウンロード", authenticated_blob_path(@xxx.file, disposition: "attachment")

ActiveStorage側が何をしているか

rails/blobs_controller.rb at master · rails/railsで実際のダウンロード処理をしているので、それを上書きする。
rails_blob_path とかは実際rails/routes.rb at master · rails/railsで定義されているので、それをまるっとパクった形になる。

アカウント消しにくいサービス&メルマガ停めにくいサービス

ということがあった。使わなくなったpixivアカウントを消そうとしたときの呟きである。

別に、「ユーザーに優しくなれ! 必ず直せ!」というわけではないんだけど、顧客を逃すまいと必死にしがみついてると無駄に嫌われるんじゃないのかな…とは思う。というか一瞬嫌いになった。

ヘルプから辿らないとたどり着けない退会リンクとかが辛い。ただひたすら辛い。

 

メルマガ配信停止のほう。Pontaなんちゃらってのが毎日来て辛いんだけど、配信停止のためにログインするには、PontaカードIDが必要とかで設計がクソ。そこにユニークなメールアドレスがあるじゃろ…つらみ…つら…。

どこのサービスだったかさっぱり忘れたんだけど、「配信停止はこちら!」のリンクを踏んだら配信停止手続きが終わってたサービスがあった。リンクに個人の情報を突っ込んで配信停止のアクションへのリクエストが完了するようになってたんだろうなあ、と思う。そういうの最高。

Rとかで仕方なく買い物をした後、無言で「××メルマガを受信する」みたいな選択されてて、翌日からひっきりなしにメールが届くのもつらい。じゃらんもそうだけど、しれっと自分のサービスのユーザーを無言で増やすのやめてほしい。

 

落ちなどない