RubyMine で開いた Terminal で fish shell のパスがうまく動作していない

TL;DR

> ~/
$ cd /Applications/RubyMine.app/Contents/plugins/terminal

> /Applications/RubyMine.app/Contents/plugins/terminal
$ mv fish/ fish.back/

> /Applications/RubyMine.app/Contents/plugins/terminal
$ ln -s ~/.config/fish .

経緯

RubyMine のみで開発を行おうと奮闘している最中、 Terminal tab を開き、bundle exec rails ... とコマンドを入力すると bundlerが無いみたいですね。 gem install bundler してください。 と言われてしまうことがありました。 いつも iTerm からコマンドを入力すると実行できていたけどなぁ...と不思議に思い、実際に開いて入力してみると、正常にコマンドが実行される…… :thinking: なるほど分からん。となったので、ひとまず、 rubymine fish-shell [検索] として調べてみることに。すると以下の記事が。

blog.corocn.jp

一通り読んでみると、この記事の著者は Intellij Ulitimate を使用している際に、同様の現象に遭遇した様子。

解決方法

IntelliJのapp内にもconfig.fishがあってそっちを読んでるのが問題っぽい。 stackoverflow見るとfunctionsの読み込み処理追加しろよ〜っ...

Intellij が Terminal tab を開くときに読み込んでいる shell の設定ファイルは、/Applications/RubyMine.app/Contents/plugins/terminal の中にあるものが呼び出されているらしい。 実際に見に行ってみると、

> /Applications/IntelliJ\ IDEA.app/Contents/plugins/terminal

$ tree .
.
├── fish
│   ├── config.fish
│   └── fish_variables
├── jediterm-bash.in
└── lib
    ├── resources_en.jar
    └── terminal.jar

2 directories, 5 files

確かになんかありますね.... ( fish/config.fish もあれば fish_valiables も )

ということで今回、同じ会社の製品とあって原因も同じだろうと考え、 最初から存在していた fish/ ディレクトリは、 fish.back と言う名前に置き換えてあげて、自分のカスタマイズしてある設定ファイルが入っているディレクトリ (私の場合で言うと ~/.config/fish/config.fish )のシンボリックリンクを貼ってみました。

> ~/
$ cd /Applications/RubyMine.app/Contents/plugins/terminal

> /Applications/RubyMine.app/Contents/plugins/terminal
$ mv fish/ fish.back/

> /Applications/RubyMine.app/Contents/plugins/terminal
$ ln -s ~/.config/fish .

そして tree コマンドを実行すると以下のような結果が得られました。

> /Applications/RubyMine.app/Contents/plugins/terminal

$ tree .
.
├── fish -> /Users/cat2koban/.config/fish/
├── fish.back
│   ├── config.fish
│   └── fish_variables
├── jediterm-bash.in
└── lib
    ├── resources_en.jar
    └── terminal.jar

3 directories, 5 files

本筋の RubyMine の Terminal tab からも、無事に bundle exec rails ... コマンドが実行できました。 これからさらに RubyMine を使い倒せそうで何よりですね。

株式会社マネーフォワードに入社しました

 実は昨日から株式会社マネーフォワードに入社していました。

エンジニアへの手厚いサポートも魅力的でしたが,会社の文化に強く共感できたことや,社員一人ひとりのカルチャーへの姿勢を受け、この会社を選びました。

そしてこれからの社会人生活,以下の 3つを忘れずに進んでいこうと思います。

  • 仕事を楽しむ
  • 無理に頑張りすぎない
  • 健康に気をつける 

仕事を楽しむのがメインになると思います。何にせよ明日も仕事かぁ...だるいなぁという姿勢で過ごすつもりはありません。残りの人生の半分以上、日々楽しむ自分を想像して頑張りたいと思います。

YAPC::Tokyo 2019 に参加してきました

はじめに

今回のYAPC::Tokyo 2019 へ参加するにあたり,学生旅費支援制度で交通費等を給付していただいた企業の皆さま,ありがとうございます。

聴講したトーク

  • 肩のこらない型の話
  • 私とOSSPerl
  • YAPC座談会
  • Perl5の静的解析入門
  • Perlでも分散トレーシングしたい
  • ISUCON8予選問題作成の裏側
  • 多くのCPAN Authorに育てられ,息をするようにCPANモジュールを書けるようになり,そして分かったこと

印象に残ったトーク

私とOSSPerl

www.slideshare.net

トークの最後にスピーカーが仰っていた「世界はOSSに優しい」がとても印象にのこった。

OSSは意外と近くにある」という言葉にも強い共感を覚えた。僕自身も,CPANから引っ張って来たモジュールを使ったり,VSCodeをつかってコードを書いたり,ネットワークのログを監視する時にSnortを用いたり,Pecoをつかってファイル検索を行ったりと,思い返してみれOSSに囲まれて生活しているな,と感じた。

CPAN authorになりたくてモジュールを開発(3年目になると称号が欲しくなるらしい)。僕もそろそろPerlを初めて3年になるので,何か称号の一つや二つ欲しいなって思ったりした。

転職後の勉強会で自分の作ったモジュールを使っている人と遭遇するなどあったらしい。(実際に同じ立場だったらとても嬉しいなと思った...)

YAPC座談会

トークを聞いていると,ほとんどJPAの方から話があった様子。

「どう,YAPCやってみない?」(?)

沖縄に関しては一度断っている。その点に関しては Okinawa.pm ができてまだ日が浅く,オーガナイザー個々の事情もあったと認識している。

それでも開催できたのは勢い。Code-Hex「そもそも同級生の子が nekokak さんに 「沖縄でもできたらいいですねぇ(ここは曖昧)」 ていったのがきっかけ!」(笑)

福岡はやるぞ!の一言がきっかけだったらしい。

辛かったこと,楽しかったことで,北海道は航空便など欠航が相次ぎ、登壇者や参加者が参加できなくなったことがあったみたい。。 登壇者の方に関しては google hongout で乗り越えたとのこと。

沖縄は会場までのバスを用意する点や、会場の選定が苦労した。しかしOISTの環境はとても良く,ほぼほぼ即決に近かった。 (バスに関しては初の試みで,乗り遅れた人がいたりと少しわちゃわちゃしていたが,特に滞りなく済んだと認識している。(スタッフの事故もあったが..(無事でした)))

perl5の静的解析入門

speakerdeck.com

Perl5を使った静的解析のノウハウをまとめたような内容だった。この発表ではちょくちょく出て来る言葉が個人的に心に刺さった...

  • コードの迷いは思考の迷い
  • 動的型付け言語でも心に静的型付けコンパイラを持つ
  • 機械にも人間にも優しいコードはPerlのサブセットになる
  • 人間には雑念があり,自己を律するのは難しい(哲学...!)

トークの最後にチラッと見えたFunction::ParametersTypes::Standardが気になった。この2つのモジュールについて少し勘違いしていたが,スピーカーのmackee_wさんにコメントで教えていただいたので,訂正しておきます。

動的型付け言語に部分的に静的型付けを導入する方法がPerlにもあるのかと驚愕。懇親会で聞こうと思っていたが話しかけられず断念...こういうところであと一歩を出していかなければいつまでたっても進まないなあと思っている...

LT

LTでは,前夜祭でもお話しさせていただいた @note103 さんの「自走するプログラミング入門者の探し方」というトークがとても印象に残りました。

speakerdeck.com

Perlを始めたての頃,note103さんの作成したCarvoを実際に英単語帳として使ったり,特別難しくなくシンプルな実装で読みやすく,色々と勉強させてもらっていたのを思い出しました。トークでも仰っていた通り,自走するプログラミング入門者,これはもしかしてnote103さん...?と思いながら聞いていました。

Code-Hexくんが前回のYAPC::Okinawaで声をかけていてくれたみたいで,それを覚えていたnote103さんが前夜祭に来ていることをAnaguraくんに教えてもらい(複雑...ww),人と人が繋いでくれた出会いだ...と勝手に一人でしみじみ浸っていました...

キーノートセッション

www.slideshare.net

Perlで開発している会社に入ったのがきっかけでPerlを触るようになったらしい。それまではPythonを使っていたというのは初めて知った...。その頃はlivedoorshibuya.pmがイケイケだったらしく,livedoorと聞くと時代だなぁと感じたりもした。

このトークセッションで一番の学びは,tokuhiromさんの仰った「CPANはちょっとしたものでもアップロードしていい」といったものだった。お堅いイメージがあったCPANが,すこし柔らかく頭の中でとっつきやすくなった(うまく日本語が思い浮かばず...何をいってるんだか...)

後に弾さんのTwitterでもこういう風に取り上げていた

 

こんな俺でもCPAN Authorになれるのかな,なんて思ったりした...。

そしてコミュニティは「利用するもの」であり「貢献するもの」という言葉もあった。貢献の一例として。

  • ブログを書く
  • 初心者をサポートする
  • 勉強会を開催する
  • カンファレンスに参加する
  • Issueを書く
  • コードを書く

などが挙げられていたが,コードを書く,カンファレンスに参加すること以外をやった記憶が遠く...コミュニティに対しての貢献度がかなり低いな,と痛感した。

懇親会

懇親会ではPerl入学式 校長ことpapixさん,note103とお話しすることができてとても良かったです。papixさんには長年停滞しているCLIツールの作成方法についてのアドバイスをいただけ,2つほどおすすめのモジュールを教えてもらいました :pray: 。note103さんには覚えていただいていたことへの感謝もあり,Carvoプロジェクトに対してのPRを送ると伝えることもできました...!!

さいごに

今回のYAPC::Tokyo 2019は,長年お会いしたかった方とお話しをすることができたり,これからの活動へのモチベーションにつながるようなトークをいくつも聞けたりと,とても有益なものばかりでした。就職活動を始めていて,辛い気持ちになってばかりいるこの時期に,少しのリフレッシュはできたんじゃないかと個人的に思っています。これからもYAPCには足を運び,自らの学びにつなげていきたいなと思いました。運営の皆さん,登壇者の皆さん,参加者の皆さん,YAPC::Toyko 2019参加して良かったです,ありがとうございます。

Perl入学式というきっかけ

これは春のPerl入学式ブログリレー4日目の記事です。

 

昨日は id:anatofuz さんのエントリでした。

今後学習を支える基盤となる母国語が身につくなど,各地のサポーターを始めとするエンジニアコミュニティの一員になれるといったPerl入学式を完走するとできるようになることについて挙げられていました。

 

似たようなことになりますが今回,僕はPerl入学式をきっかけとしておきた出来事についてお話ししたいと思います。

 

エンジニアコミュニティへの参加

 Perl入学式に参加したのをきっかけに,同級生の id:codehex くんに誘っていただき,Okinawa.pm という沖縄のPerl Mongerの集まるコミュニティに参加しました。

Okinawa.pm のブログがこちら👇

Okinawa Perl Mongers

 

 その当時,僕は実際に働いているエンジニアの人たちの集まりで,みなさん年齢も離れており,学生の僕がその場に馴染める雰囲気なのか....キッチリカッチリしていそう,怖い人とかいるのかな?など様々な不安がありました。

そんな不安をよそにまさかの開催場所は居酒屋。お酒を嗜みながら,PCを開いてLTを行うといったものでした。そして参加されていたエンジニアの皆さんも優しい方ばかりで,Perlというプログラム言語には,こういうモジュールを公開しているサイトがあるんだよ!など,色んなことを教えてくれました。

そして日が経ち,そのコミュニティで僕はLTをする機会もありました。

その時のスライドがこちら 👇

www.slideshare.net 

人前に出て発表を苦手としていた僕はいつのまにか,地域のエンジニアコミュニティで発表をしていました。

考えてみると僕はPerl入学式に参加したことをきっかけに,こうやって地域のエンジニアコミュニティに参加したり,他の勉強会にも興味を持って参加したり,カンファレンスとよばれる,エンジニアの技術トークを行う大きなイベントにも足を運んだりと,興味が興味を呼んで色々と行動を起こすようになりました。行動を起こすようになり,エンジニアとの繋がりも増え,僕が悩んだり,困ったりした時に一緒になって考えてくれる大学の友達も作ることができ,共に技術を高め合う仲間も見つけることができました。ちなみに昨日のエントリを書いた id:anatofuz さんはPerl入学式をきっかけに彼女ができたようです。 今ではコミュニティメンバーの1人の,ホテルシステムの開発,研究を行っている企業の社員さんにお声がけをしていただき,アルバイトエンジニアとしてお仕事に携わることができています。Perl入学式で学んだプログラミングを,今はお仕事で活用できています。プログラミングを学ぶPerl入学式という機会があったからこそ,今の僕があると思っています。(唐突な無理矢理感)

 

あなたもPerl入学式をきっかけに,プログラミングをはじめてみませんか?

 

明日は, @uniuni_sea さんです,お楽しみに٩( ᐛ )و

 

 

Shell Scriptで書かれた作業時間管理ツールをPerlに書き直す (序章)

これはPerl Advent Calender 2017 20日目の記事です。

広告

YAPC::Okinawaは現在,カンファレンス参加チケット・トークプロポーザルを絶賛募集中です!

yapcjapan.org

この広告は,90日以上更新されていないブログにのみなんちゃらかんちゃr

はじめに

普段は南の島の大学の4年生やってます。絶賛卒業研kうっ...頭が..(ノートはここで途切れているようだ...)

よくバイトや研究をしていて,作業の開始時間と終了時間を簡単に記録できたらいいななんて思うことがありました。 Terminalで簡単に管理できる作業時間ツールでも作るか,と意気込んでいたその時。

タイミングよく友人がShell Scriptでそのツールを書いていたので,勉強がてらそれをPerlに書き直すことにしようと決めました(┐「ε:)

友人の作成した作業時間管理ツールがこちら。

github.com

checkは研究時間を記録するために作られました。基本的な使い方は指定したプロジェクトにcheck-in, check-outをするというシンプルな機能です。複数のプロジェクトに対応しているので毎日の活動を記録するのに最適です。check-inした後もバックグラウンドで動いていないのでコンピュータを再起動したりしても問題ありません。

ふむふむ,すごい(語彙ry..

Perlへ移行

僕がPerlで書き直す上で年内に移行したい機能たち

  1. check man
    使い方を表示してくれる help みたいなもの

  2. check in <project_name>
    作業時間の記録を開始。

  3. check out
    作業時間の記録を終了。


今回は序章ということもあり(オイオイ...),項目1. check manまでの移行に関してまで書きます。
生暖かい目で見守っていただけますと幸いです。

manオプションの移行

書き直す前のShell Scriptではこんな感じ
- 受け取ったオプションを if 文で分岐かけてそれぞれの処理に流す感じ。

main() {
  #$1がないなら終了する
  check_nonactive $1
  #コマンドの実行環境の確認
  check_database

  #$HOME/checkに移動する((
))  cd $dirpath
  #実行状態の確認
  if [ $1 = "in" ] ; then
    check_in  $1 $2

  elif [ $1 = "out" ] ; then
    check_out

~~ 省略 ~~
  
  elif [ $1 = "man" ] ; then
    check_man
  fi

  #元のディレクトリに移動する
  cd - > /dev/null
}

main $1 $2 $3

ひとまず,terminal上で check <オプション> てな感じでやりたい。 モジュールを自分で作って使ってみたいなとか考えて,Shell で書かれたものとは違うファイル構成にしました。下図がその構成f:id:sorehaedamame:20171220004113p:plain

CLI/ 以下にIN, OUT, Man, etc...とオプションごとに作る予定です。 と,ここで書き直した様子を。。

まずpcheck というファイルがこんな感じで。

1 #!/usr/bin/env perl
2 use File::Spec;
3 use Cwd 'getcwd';
4 unshift @INC, File::Spec->catfile(getcwd, "lib");
5 require Check::CLI;
6 
7 exit Check::CLI->commands(@ARGV);

モジュールが入ってる lib のPATHを@INCに入れてあげる。
最後に exit Check::CLI->commands(@ARGV); で入力したオプションをCLI.pmに渡してあげる

package Check::CLI;

use strict;
use warnings;
use utf8;
use Data::Printer;
use Check::CLI::Man;


sub commands {
    my ($self,$function,$project_name) = @_;

    exit print "check requires function name!\n" unless defined($function);

    # function によって,実行処理を変更
    for ($function) {
        # function が man なら各コマンドの説明
        if (/man/) {
            exit Check::CLI::Man->man();
                }elsif (/IN/){
                        # check in の処理
                }elsif (/OUT/){
                        # check out の処理
                }
    }
}


1;

$functionが定義済みか確認 受け取ったオプションが何か判断して,それぞれの処理を行うモジュールへ。

package Check::CLI::Man;

use strict;
use warnings;
use utf8;
use feature qw/say/;

sub man {
    my $self = shift;
    say " ";
    say "  check is a easy time logger tool.";
    say " ";
    say "    check has some functions.";
    say "      check in [project] : You can start logging time.";
    say "      check out : You can stop time logging.";
    say " ";
}

1;

man()が呼ばれたらとりあえず使い方をsaysaysayしていく。
これで簡単にmanオプションまでは移行しました。
現在はcheck-inの機能の移行を進めているのですが,SQL周りで苦戦してます。
現在移行中のリポジトリがこちら⬇︎

github.com

広告

YAPC運営ブログも更新中です!
移動手段や沖縄の美味しい料理のお店,治安のないお土産の情報などについても公開しております!
現在トークも絶賛募集中です!皆さん是非お応募しましょう!

docs.google.com

検討事項

  • SQLite3辛い....
    ただひたすらに書いて慣れるしかないんだ...( 返事がない,ただのしかばねのようだ )
  • Moo要素をどこに盛り込もうか
    実は当初の目的は, Mooを使って移行するぞ!っていう意気込みの元移行に取り掛かっていました....でも書いてるうちに,あれ,これMoo使わないで動くのでは?.....( use Moo; を消すたばの姿 ) あ....動いた...うっうっ...
    ドキュメントの流し見よくないですね。気をつけます。

最後に

ここまで読んでくださりありがとうございます。
年末に移行を終えたらブログを続けて書こうと思ってます。
( 投稿されなかったら誰か「移行終わった?」とか「ブログ書いた?」とかもうどんどんナイフを投げてください。)

明日はbooksさんです!お楽しみに!

YAPC::Fukuoka 2017 HAKATA に参加してきました!

  今回もYAPC( Yet Another Perl Conference )に参加してきました!

会場はLINEの福岡オフィス!素晴らしく清潔感あり落ち着いた雰囲気で, 居心地がとても良かったです!

 

考えるとYAPCはこれで2回目の参加になります!

 

 相変わらずYAPCは楽しかったです!何より, 前線で活躍されてるエンジニアの方々のお話を生で聞くことができたのは相当モチベに繋がるものがありました!

 今回YAPC::Fukuoka 2017 HAKATA へ参加するにあたり, 学生旅費支援制度で交通費等を給付していただいた企業の皆さま, 大変ありがとうございました. 

 

前夜祭

 ヌーラボにて行われた前夜祭では, LTソンという時間が許す限りLTをするイベントが行われました!同級生のKくんや, 1つ下の後輩のアナグラくんたちのLTを聴きながら, バイキング形式の料理を堪能しました.  他の皆さんも明日への本番の準備に向けて着々と熱を高め合っている感じがしてとても和気藹々とした様子でした!

 

特に印象に残ったトーク

www.slideshare.net

 

 セキュリティキャンプの講演で前々から知っていた徳丸さん!

実際にWeb Shellというツールを,  攻撃先のサーバーに設置して, ブラウザを開いてそれを用い, 実際に脆弱性を突いて情報を取得していく. といったデモ形式のトークで, とてもゾッとする話もあれば, なるほど, サーバー側にシェルをダウンロードさせることもできるのか......やってみよう!だったりと, 聞いてて自分でもやってみたくなる話も多々あり, すごく興味をそそるトークでとても聞いてて飽きず楽しめました. 

 現在4年で, ネットワークセキュリティ関連の研究を進めている私からすると, 徳丸さんの話を生で聴けたのはすごい貴重な体験で, とてもためになることだらけでした!

 

懇親会

 懇親会は,九州創作酒場 博多 笑門にて行いました!

あまり食べたことなかったもつ鍋.......福岡来て初めて食べたんですがとても美味しかったです!そして懇親会といえば, 登壇者や他の参加者との交流!僕はコミュ障が発揮してしまい...ずっと同じ席に座っていたのですが.....サポーターズの楓さんの後押しのおかげもあり!他の参加者との席に一緒にさせていただきました!

 そこで他の参加者のお話を聞いていたのですが, なんと皆さん普段から業務でPerlを書いてらっしゃるとのこと......やはりPerlはまだまだ現役で, 今もどこかでしっかりと活躍してる素晴らしい言語なんだなとしみじみ....()いやいやというか本番の最後に, LINEのスポンサーセッションの際にも, LINEのアプリ(以下に記載されてる写真に掲載されているアプリ4つ)はPerlでできています!という衝撃発言.....があったんです!

 これにはもう...びっくりでした.......

 

まとめ

 いやはやYAPCは最高ですね!最初にも書いた通り, 前線で実際に活躍されているエンジニアの話を生で聴けるなんてもうすごいこと!!しかも懇親会ではその人たちが実際にいるんですもの!(コミュ障発動しちゃいましたが......)

 

 来年も参加しようと!決意しました..........

 

と言いたいのですが, 来年は沖縄ですね!

 

 実際にティザーサイトも上がってるみたいです!

yapcjapan.org

 

 

 僕がこのティザーサイトを書いたのですが....何かうーんfukuokaの頃に比べると......

時間を作って, よしなにいい感じに作っていけたらなと思ってます.....

頑張ります٩( ᐛ )و