tawara's blog

雑記。個人の見解です。

「金の切れ目が縁の切れ目」を、splitメソッドで作ってみた!

こんにちは、rubyの復習をします。

今日はsplitメソッドです。文字列を配列にすることができるみたいです。 この教材をだらだら見てるときに思いつきました。

Rubyで入門(下巻)】"ちゃんと" Ruby を学ぼう! ー オブジェクト指向機能で完結!編 | Udemy

www.udemy.com

金の切れ目が縁の切れ目

hoge.rbファイルを作って、、、

# 金でつながる集団を作ります
kizuna_money = "僕金あなた金彼ら"

# 金に切れ目を入れます
kizuna_no_money = kizuna_money.split("")

p kizuna_no_money 

と書きます。これを実行すると、、、

Image from Gyazo

となります。 僕、あなた、彼らは金があった場所で区切られてしまいました。 まさに金の切れ目が縁の切れ目になってますね!

しかも面白いのは、金が「なくなっている」ことですね笑

splitの引数に渡した文字列は配列には含まれないようです。

愛の団結

配列を文字列にすることもできます。joinメソッドです。

kizuna_money = "僕金あなた金彼ら"
kizuna_no_money = kizuna_money.split("")
p kizuna_no_money 

# 愛で団結する
kizuna_ai = kizuna_no_money.join("")
p kizuna_ai

こんなふうに書いて、実行すると、、、

Image from Gyazo

"僕愛あなた愛彼ら"と団結することができました。他にも愛の代わりに、信頼、信仰、地縁、血縁、利益などが代替できますね。外部から挿入できるものなのか、ということはさておいといて。

思いついたくだらないことを、実現できるって楽しいですね!

【each文の復習】趣味嗜好の合致度計算式

こんにちは。

rubyの勉強をきちんとやってこなかった。 いわゆるチェリー本をやるには、ちと気合が足りない。 なので、udemyの初心者向けの教材で復習してみることにしました。

Rubyで入門(上巻)】はじめてのプログラミング ー "ちゃんと" Ruby を学ぼう! ー 基礎構文から始めよう!編 | Udemy

www.udemy.com

ほんとうに基礎から解説してくれているので、さくっと見れてよかったです。

趣味嗜好の合致度計算式

「私の好きな作家はねー、、、」と女性が言い始めたら、「趣味は合うのかなー」と思ってしまうのが本好きのサガ、だと思う。

そこで、好きな作家がかぶったら、いいねポイントが上がる、ロジックを書いてみた。

hoge.rbに以下を書く。

her_favorite = [ "安部公房", "村上春樹", "中村文則", "乙一", "伊坂幸太郎", "乙一", "小川洋子", "見田宗介", "高田保馬"]

like = 0

her_favorite.each do |author|
  my_favorite = [ "村上春樹", "伊坂幸太郎", "小川洋子"]
  like += 1 if my_favorite.include?(author)
end

puts like

で、これをvimで出力するには、こんなふうにやればよい。

Image from Gyazo

相性合致度が 3 ポイント だということがわかる。

簡単なロジックでも勉強になっていいですね!

楽天トラベルAPIを叩いてくれるLineBotを作った!

こんにちは、たわらです。

ハンズオン型の教材を買って実践してみました。

実践した教材

これをやってみました。LineBotって作ったことなかったので、いい勉強になるかな、と思って。 こんな gem あるんだ、と勉強になったので、よかったです。

Ruby on Rails で宿泊検索 LINE Bot を作ろう! | Techpit

www.techpit.jp

楽天トラベルAPIを叩いてくれるLineBot

キーワードを入れると、楽天トラベルAPIを叩いてくれて、宿泊施設を返してくれます。 熟練のかたは、単純だな、と思うかもしれませんが、LineBotすげー、とボクは思ってしまいました!

Image from Gyazo

学んだこと

環境構築で詰まる

❯ bin/webpack-dev-server
node:internal/modules/cjs/loader:903
  throw err;
  ^
Error: Cannot find module 'webpack'
Require stack:
- /Users/tawarakentarou/kusoapp/linebot/node_modules/webpack-dev-server/bin/webpack-dev-server.js
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:900:15)
    at Function.Module._load (node:internal/modules/cjs/loader:745:27)
    at Module.require (node:internal/modules/cjs/loader:972:19)
    at require (node:internal/modules/cjs/helpers:88:18)
    at Object.<anonymous> (/Users/tawarakentarou/kusoapp/linebot/node_modules/webpack-dev-server/bin/webpack-dev-server.js:12:17)
    at Module._compile (node:internal/modules/cjs/loader:1083:30)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1112:10)
    at Module.load (node:internal/modules/cjs/loader:948:32)
    at Function.Module._load (node:internal/modules/cjs/loader:789:14)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:72:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/Users/tawarakentarou/kusoapp/linebot/node_modules/webpack-dev-server/bin/webpack-dev-server.js'
  ]
}

何のこっちゃと思ったら、どうやらnode.jsのverが悪さをしていたらしい。というか、systemにもともと入っていたnodeを使っていた。15.?.?を使っていた。

親切なRUNTEQ生が、

rails 6.0.3.4とnode ltsバージョンでwebpack使ってますが、エラー出ないですよ!

と教えてくれた。ltsバージョン??? Long Term Support ( 長期サポート)のこと。とりあえずこのバージョンを入れると解決! 友人に感謝! 

ダウンロード | Node.js

nodejs.org

Messaging APIの概要

Lineアプリとサーバー(Railsとか)の間にLineプラットフォームなるものがある。これが、いろいろ仕事をしてくれるみたい。それぞれのデータのやり取りする場のことを、チャネルというらしい。

Messaging APIの概要 | LINE Developers

developers.line.biz

LINE Developersコンソールのアカウント作成してチャネルを作成する

developers.line.biz

LINEではLINE Botの開発を簡単にはじめることができるLINE Messaging API SDKが配布されている。もちろんrubyもある。これでいろんなメソッドが使える! gem line-bot-apiというものがある!

developers.line.biz

リポジトリにはexampleフォルダがあって、オウムがえしのソースが載ってる。

line/line-bot-sdk-ruby: LINE Messaging API SDK for Ruby

github.com

ngrok

ngrok - secure introspectable tunnels to localhost

ngrok.com

外部から開発環境にアクセスすることができるようになるツール。専用のURLを発行してくれる。httpsも! 読み方はわからない。

rails 6 には開発環境を外部アクセスから守るために指定されたホスト名が必要になる。localhostとか。なので、ngrokの発行するURLは防御されてしまう。config/environments/development.rbに細工が必要になる。

環境変数について

機密情報はOS上に保存して、必要なときに呼び出す。そのように管理された情報を環境変数と呼ぶ。復習になった。

こういう便利なgemもある。

bkeepers/dotenv: A Ruby gem to load environment variables from .env.

github.com

処理が走ってるかを確認する方法

controllerに、

p '正常に動いてるよ'

と書けば、サーバーログで処理が走っているかを確認することができる。たしかに!

Hashクラス

key?メソッドは変数.key?('キー名')とすることで、指定したキー名が存在した場合にtrueを返す。

APIの仕様について

どんなパラメータを追加すると、どんなふうに返すか、ということについてきちんと理解すること。

Flex Message

Line上でカードみたいなふうに情報を表示できる。そのことをFlex Messageと呼ぶらしい。そのシミュレーターもある。これにはいたく感動した!雛形がいくつかあるので、簡単にそれっぽいデザインが作れる。シミュレーターでデザインを作成し、それをjson形式で吐き出せるので、そのような形になるようにサーバー側でロジックを組む、という開発の流れになる。

Flex Messageの要素 | LINE Developers

developers.line.biz

developers.line.biz

Herokuでの環境変数の設定

heroku config:set LINE_CHANNEL_SECRET="xxxxxxxx"

HTTP通信

http通信を扱いやすくするgem。

nahi/httpclient: 'httpclient' gives something like the functionality of libwww-perl (LWP) in Ruby.

github.com

感想

はじめてLineBotを作ってみた。適宜資料も紹介されてあってわかりやすかったです。コードはコピペを多用しましたが、ざっくり流れが把握できたので満足です。

次は、Line上でアプリを動かせるというLINE Front-end Framework(Liff)にチャレンジしたいですね!

コンピューターの三大原則!

こんにちは、たわらです。

コードを書く上で、概念やら理論やらが整理されていないと、頭が混乱して手が止まってしまうタイプなので、抽象度の高い本を探していました。職場にこの本があったので読んでいます。

amzn.to

のっけから、コンピューターの三大原則について説かれていて、感心してしまいました。

三大原則

1 コンピューターは、入力、演算、出力を行う装置である(ハードウェア)

コンピューターのハードウェアはIC(Integrated Circuit 集積回路)から構成されていて、個々のICにはピンがたくさんついている。このピンは入力用か出力用のどちらか! なるほど、あのムカデみたいな足はこれだったのか! 足の一つから入力された情報を演算して足の一つから出している、ということなんですね。すっきり。

2 プログラムは、命令とデータの集合である(ソフトウェア)

命令とは、入力・演算・出力をコンピューターに指示するもの。この命令を並べたものがプログラムのこと。で、ひとかたまりの命令群に名前をつけて、「メソッド」や「関数」などと呼ぶ。引数・処理・返り値が入力・演算・出力に相当しているのですね!

データは、命令の対象となる入力情報 / 命令の結果によって得られる出力情報のこと。プログラミングではデータに名前をつけて「変数」と呼ぶ。

命令は数学の関数の構文が使われる。

 y=f(x)

yが出力情報で、xが入力情報で、fが演算ということ。

余談ですが、あまりにも関数が多くなりすぎたために、似ている機能を寄せ集めてひとつにしたのがオブジェクト指向のクラスという概念らしい。この本の後半に登場する。

3 コンピューターの都合は、人間の感覚と異なる場合がある

代表的な例は、なんでも数値に表すこと。色も文字も公開鍵も秘密鍵も全部数値のこと。ソースコードマシン語に変換することをコンパイルといい、コンパイルを含む変換作業をビルドというらしい。

最後に

ざっくりまとめると、入力・演算・出力の3つが大事で、コンピューターはそれらを数値で処理する、ということですね。この出力情報を入力情報として扱って常に結果を変化させることをフィードバックというのではなかったかしら、、、まあそれは別の話。

参考文献

コンパイル」と「ビルド」の違い|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

https://wa3.i-3-i.info/diff502programming.html

技術勉強会を開催するときの留意点などの相談結果

こんにちは、たわらです。

この11月から株式会社ベストティーチャーでRailsエンジニアとして働いています。つまりまだ勤務して一週間です。

エンジニアのもくもく会やらカンファレンスやらと勉強する文化が好きなので、職場で勉強会を開けたらよいなーと思っていました。

だったらすでにやってる人にヒアリングしてみよう、ということでRUNTEQ(というプログラミングスクール)のコミュニティですでに勉強会をしてる人に相談してみました。

どんな感じでやってるんすか?、と。下記そのざっくりしたメモ。

・先輩エンジニアの場合。

技術書輪読会:毎日、11時45分から15分。オブジェクト設計ガイド、とか。 技術勉強会:週イチで、お昼時に勉強会。インセプションデッキなどをやるときもある。オンラインでやってる。1時間くらい。

・RUNTEQ講師Aによる経験の場合。

読書会:あらかじめ読んできて、週に1,2日。誰かが発表する。それに対する意見交換。30分くらい。

技術勉強会:Iscon、ロゼッタコード 、Paizaの問題を参考に、アルゴリズムの意見交換。30分くらい。

留意点 課題設定がむずい。みんな興味がることじゃないといけない。ある程度のレベル感もないといけない。

なお、勉強会を開催するに当たって、教えてクレクレという態度では先輩エンジニアを巻き込みにくいよ、とのアドバイスをもらう。どこまでわかる/わからないを明確にしてから質問なりをするように、と。

スクラムに詳しい人からのアドバイス

・とりあえず好きな方法でやってみる。時間経過により中だるみするタイミングがある。そのときに読書会の目的を再考し、やり方を改善する。

・現実的な方法としては、大人数ではじめるよりは信頼のある少人数でのスタートがよい。タイムボックスを守る。

という意見をもらいつつ、現状で考えたことはこんな感じ。

・先輩エンジニア、チーム、事業にメリットないとおそらくダメな気がする

・サービスの技術負債に関連した勉強会だと三方良しな気がする

・輪読だとだらけそうなので、よりもたわらが指定図書のある部分をまとめて発表、意見交換、30分、みたいな方法がよいかも

・チームとして新人にはこれを読んでほしい、という本があるかもしれないので相談する

・勉強会を主催をしている場合じゃないだろ、という意見もあるかもしれないので相談する

・LTの練習にもなるかもしれないからいい感じ、と思うが、どれくらい準備にコストがかかるかわからないという不安もある

・選ぶ本もいまいち自信がない

とりあえず相談してみるのがよいかな、、、というところで終わります。

たわら

OKRという目標管理方法にはじめて触れるので、そのメモ

こんにちは、たわらです。

職場で目標管理にOKRという手法を採用しています。僕ははじめて利用するので、どんなものなのかをざっくり調べたので、そのメモです。

ざっくりした説明。

  • OKRは(Objectives and Key Results)の略。目標と成果指標のこと
  • 会社の目標と成果指標があって、その成果指標の下にチームの目標と成果指標があり、その成果指標の下に、個人の目標と成果指標がある、という構造になる。会社の目標と個人の目標がリンクするのがポイント

メリットとしては、例えばこんな感じ。参考文献1から引用。

  • 企業のビジョンに沿った目標を、常に従業員に示すことができる
  • 従業員が「何を期待されているか」がわかりやすく、納得度が上がりやすい
  • 目標に対する進捗を定期的に振り返るため、進捗管理の役割も果たす
  • 常に重要なゴールを意識でき、インパクトの小さい目標に惑わされない

Object 目標を立てるポイント。参考文献1から引用。

  • 定量的である必要はなく、定性的な目標でも可
  • 「野心的な」目標を設定すること
  • 自分では「直接的に」コントロールができないもの
  • 会社の目標や、他のチーム目標などと整合性がとれている
  • 1チーム(or 個人)設定数の目安:3〜5個

Key Results 成果指標を立てるポイント。参考文献1から引用

  • 定量的(納期、指標などの数値が入っている)でなければならない
  • 自分でコントロール可能なものを選ぶ
  • ただし、「普通にできる」ことはNG(それはTo Do)
  • やや達成困難で、眺めていたら不安になる数値を設定すること
  • 1つのOに対して、3〜4のKRを設定する

OKRはワクワクする目標を立てて、その下に定量的な指標を定める。なので「情」と「理」であれば8:2くらいを意識したほうがよい、らしい。参考文献2より。

食べログではこの手法を取り入れると、3ヶ月で部の雰囲気が一変したそう。根気強く実施・改善していくとよいみたい。参考文献3。

上記を参考にOKRに取り組んでいきたい。成果や改善例があったら、順次ブログにアップしたいな、と思うところで本記事は終わる。

たわら

参考文献1

【保存版】Googleも採用する目標管理「OKR」を徹底解説!導入事例や運用ツールも紹介 | SELECK [セレック]

参考文献2

「理」と「情」、そしてKPIとOKRについて|けんすう

参考文献3

技術部門にOKRを導入したら3ヶ月で部の雰囲気がめちゃくちゃ良くなった話 - Qiita

React勉強会に参加して簡単なアプリを作成した、というメモ

こんにちは、たわらです。

先日、Reactの勉強会イベントに参加したので、その記録を残しておきます。

34【フロントエンド開発入門】はじめて学ぶReactハンズオン勉強会|JavaScript初心者可 - connpass

npo-fitness-engineer.connpass.com

資料も大変わかりやすくて、声も聞き取りやすかったです。

90分のハンズオンで、こんなのができました。

React App

trusting-pike-0fde48.netlify.app

ポートフォリオのロゴの二冊目くんが回っています。いい感じです。

二冊目

www.nisatume.com

ほぼコピペで作成したので、深くはぜんぜん理解していませんが、下記所感です。

  • コンポーネントという部品を作って、それを大元に読み込ませてページを作成する
  • Railsでいうappディレクトリがsrcディレクトリに相当するっぽい(ただし静的ファイルの場所とかは違う)
  • npm run-script build コマンドを打つと、本番用のソースが反映されたbuildディレクトリが作成される

構造的な理解はできませんでしたが(当たり前!)、よくわかんないけど動くものが作れた経験ができてよかったです。フロントエンドも勉強したいと思っていたので、取り掛かりとしてはとてもよい勉強会でした! 続きのイベントにも参加してみたいです。

資料が見やすいです、どうやって作ったんですか、と質問すると親切に参考サイトを教えてくれました。学習コストがわからないけど、かっこいい資料が作れそうです。感謝!

claatを使ってCodelabs形式のオリジナルハンズオンを作る - My External Storage

budougumi0617.github.io

たわら