tag:crieit.net,2005:https://crieit.net/tags/AdventCalendar/feed 「AdventCalendar」の記事 - Crieit Crieitでタグ「AdventCalendar」に投稿された最近の記事 2019-11-03T08:43:57+09:00 https://crieit.net/tags/AdventCalendar/feed tag:crieit.net,2005:PublicArticle/15502 2019-10-24T22:18:21+09:00 2019-11-03T08:43:57+09:00 https://crieit.net/posts/12-Advent-Calendar-5db1a49d3f09d 12月にAdvent Calendarを開催します <p>もうすぐ年末ですね。去年CrieitでAdvent Calendarを開催しましたが、今年も開催を予定しています。</p> <h2 id="昨年との違い"><a href="#%E6%98%A8%E5%B9%B4%E3%81%A8%E3%81%AE%E9%81%95%E3%81%84">昨年との違い</a></h2> <h3 id="誰でもカレンダーを作ることができる"><a href="#%E8%AA%B0%E3%81%A7%E3%82%82%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B">誰でもカレンダーを作ることができる</a></h3> <p>去年は何でも書いていいCrieit Advent Calendarというカレンダーと、個人開発サービスに用いられている技術 Advent Calendarの2つのカレンダー固定で開催していました。</p> <p>Crieit Advent Calendarは今年も僕が作りますが、あとはQiitaやAdventarと同様に誰でも自由にカレンダーを作れるようにしています。</p> <h3 id="予約投稿可能"><a href="#%E4%BA%88%E7%B4%84%E6%8A%95%E7%A8%BF%E5%8F%AF%E8%83%BD">予約投稿可能</a></h3> <p>去年は当日までに下書きを書いておいて、それを忙しい当日の朝に投稿し、カレンダーに登録、という非常に使い勝手の悪い仕様で利用していただいていました。今回は予約投稿できるようにしているため、カレンダーに登録して下書きを指定して頂ければ当日の7時に自動的に記事が本登録されるようになっています。</p> <h2 id="スケジュール"><a href="#%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB">スケジュール</a></h2> <p>11/1~ カレンダーに予約開始、及びカレンダーの作成機能公開<br /> 12/1~ カレンダー進行</p> <h2 id="今年のスタンス"><a href="#%E4%BB%8A%E5%B9%B4%E3%81%AE%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9">今年のスタンス</a></h2> <p>去年はCrieitがリリースして間もないということもあり、かなり多くの方にご協力いただきました。年末の忙しい時期にバタバタとしながら投稿していただいたことに感謝しています。しかし今年はリリース後1年たち、2度めの年末となりました。あとはもう無理せず、Advent Calendarものんびり運用していければいいかなと考えています。</p> <p>盛り上がり的には絶対的にQiitaやAdventarでAdvent Calendarに参加していただいた方が楽しいと思います。ただ、そちらは敷居が高くて投稿しづらい、という場合があると思います。また、そちらにはなんとなく参加したいものがないし、書きたいものがガチポエムみたいなものだとするとサービスの色にマッチしていないという場合もあると思いますので、その場合は是非CrieitのAdvent Calendarを利用して頂ければ幸いです(なんならAdvent Calendarの機能を無視して非公開ボードで投稿していただいても良いと思います)。</p> <p>僕が立てるCrieit Advent Calendarは前年と同様、どなたでも何でも投稿していただいてOKです(埋まらない場合は僕が瀕死で全部埋めます)。もちろん一人でAdvent Calendarを埋めたい、という場合は自分用のカレンダーを作って挑戦していただいても大丈夫です。また、特定のジャンルの記事があつまるといいなぁ、と思う場合にも是非カレンダーを作ってみてください。僕の知識で分かるものがあれば僕は絶対投稿します。</p> <p>ということで、ゆるい感じでやっていきたいと思いますので、何にも気兼ねなく、各々が思うがままに気軽な感じで適当にシステムを使って頂ければと思います。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/14697 2018-12-27T08:10:45+09:00 2018-12-27T21:19:33+09:00 https://crieit.net/posts/Advent-Calendar-5c240a75214ff Advent Calendarを開催してみての振り返り&考察 <p>12/1~12/25まで、CrieitではAdvent Calendarを開催しました。色々と振り返って考察してみたいと思います。</p> <h2 id="どんな記事が集まったか"><a href="#%E3%81%A9%E3%82%93%E3%81%AA%E8%A8%98%E4%BA%8B%E3%81%8C%E9%9B%86%E3%81%BE%E3%81%A3%E3%81%9F%E3%81%8B">どんな記事が集まったか</a></h2> <p>カレンダーは下記のものがありました。</p> <h3 id="アドベントカレンダー Advent Calendar 2018"><a href="#%E3%82%A2%E3%83%89%E3%83%99%E3%83%B3%E3%83%88%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC+Advent+Calendar+2018">アドベントカレンダー Advent Calendar 2018</a></h3> <p><a href="https://crieit.net/advent-calendars/2018/crieit">https://crieit.net/advent-calendars/2018/crieit</a></p> <p>何を書いてもOKなカレンダーです。</p> <h3 id="個人開発サービスに用いられている技術 Advent Calendar 2018"><a href="#%E5%80%8B%E4%BA%BA%E9%96%8B%E7%99%BA%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AB%E7%94%A8%E3%81%84%E3%82%89%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E6%8A%80%E8%A1%93+Advent+Calendar+2018">個人開発サービスに用いられている技術 Advent Calendar 2018</a></h3> <p><a href="https://crieit.net/advent-calendars/2018/technology">https://crieit.net/advent-calendars/2018/technology</a></p> <p>主に個人開発のことについて書くカレンダーです。元々最初のカレンダーだけの予定だったのですが、こちらは <a target="_blank" rel="nofollow noopener" href="https://twitter.com/nabettu">@nabettu</a> さんが発案してくださり作成することになりました。この案がなかったらカレンダーも記事も存在しなかったのかと思うの恐ろしい…くらいには良い記事が集まりました。是非ご覧ください。</p> <p>この2つのカレンダーにて合計約50記事程が集まりました。僕が個人開発者だからそう感じてしまうのかはわかりませんが、どの記事も非常に面白く、且つ有益で、恐らく今年の日本で数多く生まれたAdvent Calendarの中ではこれらの有益密度が一番濃かったのではないかと思うほどでした。</p> <h2 id="参加してくれた方々"><a href="#%E5%8F%82%E5%8A%A0%E3%81%97%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%9F%E6%96%B9%E3%80%85">参加してくれた方々</a></h2> <p>1つ目のカレンダーの説明文にも書いたとおり、枠が埋まることは想定していなかったので元々25記事毎日書くつもりでした(ジョークみたいな書き方をしていましたがジョークではありませんでした)。ただ、最初に知り合いの方々にかなり枠を入れていただけ、そのおかげか、空いていた枠も徐々に埋まっていきました。これは本当にありがたかったです。</p> <p>集まって頂き、記事を書いて頂け、本当にどうやって感謝していいのかがリアルに分からないほど、感謝してもしつくせない程です。ありがとうございました。</p> <h2 id="何か貢献できたのか?"><a href="#%E4%BD%95%E3%81%8B%E8%B2%A2%E7%8C%AE%E3%81%A7%E3%81%8D%E3%81%9F%E3%81%AE%E3%81%8B%EF%BC%9F">何か貢献できたのか?</a></h2> <p>何か貢献できるのだろうか、これは正直ずっと僕の中では始まる前から現在まで明確な答えは出ません。</p> <p>Crieitに書けば多くの人に見てもらえるでしょうか? まだCrieitは小さなサービスですし、それは無いと思います。書いていただいた方々の記事がすばらしいものであればあるほど、不安と申し訳無さが大きくなりました。</p> <p>Crieitじゃなく、Qiitaとかに書いた方がいいね数が伸びてもっとたくさんの人に呼んでもらえたのでは? それぞれの得意なプラットホームで書いた方がもっとはてなブックマーク数が伸びてバズってもっと多くの人の目に触れてもらうことができたのでは? と。</p> <p>CrieitにもQiitaのように本人だけに見ることができるアクセスカウンタがあります。Qiitaに書いたことがある方であるばわかるかもしれませんが、恐らくQiitaに比べてこの数値は小さいのではないでしょうか(カウントアップの仕様は違うかもしれませんが)。DB上でその値を見る度に、皆さんがっかりされてるだろうな、と申し訳なくなります。</p> <p>逆にバズったらバズったでそれも、Crieitじゃなくて自分のブログとかに書いてもらっていた方が自分の資産が増えてよかったのでは? とまた申し訳ない気持ちになります。</p> <h2 id="貢献できたこと、今後できること"><a href="#%E8%B2%A2%E7%8C%AE%E3%81%A7%E3%81%8D%E3%81%9F%E3%81%93%E3%81%A8%E3%80%81%E4%BB%8A%E5%BE%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%93%E3%81%A8">貢献できたこと、今後できること</a></h2> <p>ただ、そんな不安は正直色々サービスを作っていると慣れたもので、最終的にはとにかく頑張るしか無い、というところに行き着きます。悩むのではなく、じゃあ投稿してくれた方々に何を貢献できたのか、悩んだ結果今後さらに貢献できそうなのか、それを考えていくしかありません。</p> <h3 id="記事は生き続ける"><a href="#%E8%A8%98%E4%BA%8B%E3%81%AF%E7%94%9F%E3%81%8D%E7%B6%9A%E3%81%91%E3%82%8B">記事は生き続ける</a></h3> <p>ポジティブな目で考えると、そもそも記事は一度生まれると25日しか生きられないわけではありません。今後ずっと残ります。検索で誰かがたどり着いて見てくれたり、古いツイートからたどり着いたりすることもあると思いますので、今後もずっと各記事のアクセス数は増えていきます。それだけでなく、突然誰かが記事を引用などして、爆発的にアクセスが増えたりすることもあります。実際に僕もCrieitで記事を書いてからそういったことがありました。</p> <p>記事は一度生まれたことで、色々なことが起こる可能性を手に入れています。確実ではないのが悲しいところではありますが、そういった部分にも期待していきたいと思っています。</p> <h3 id="何か新しいことをする機会"><a href="#%E4%BD%95%E3%81%8B%E6%96%B0%E3%81%97%E3%81%84%E3%81%93%E3%81%A8%E3%82%92%E3%81%99%E3%82%8B%E6%A9%9F%E4%BC%9A">何か新しいことをする機会</a></h3> <p>今回参加された方の中に、Advent Calendarに初参加、ということを何人かの方が言われているのを見かけました。もしCrieitでAdvent Calendarを開催していなかったら、その方々はAdvent Calendarに参加するという機会を得ることができなかったかもしれません。実際には今後別途何かで参加される可能性もありますが、今年参加したのとでは、その経験の違いから、本人すらも気づかない部分で、今後の1年何かしらの考え方に影響して何かが違っていくかもしれません。</p> <p>他にもこういった記事を書くこと自体がはじめてだったとか、サービスに投稿するとか、想像していた以上にTwitterなどでシェアされて投稿を読んでもらえたとか、そんな感じで、今回参加しなければ得られなかった経験を提供することができたかもしれません。</p> <p>逆に、参加してがっかりしたとか、大変だったから参加しなかったら良かった、とかもあるかもしれません。また、参加しようと思ったけどできなかったとか、予約したけど取り消したり、結局書かなかった、とかもあるかもしれません。そんな負の体験でも、それぞれの方にとっては一つの大切な経験になる可能性があると考えています。</p> <p>そんな感じで、どんな感情であれ、何か一つでも新しいことを提供できたのであれば、Crieitが誰かに対して何かを貢献できたのでは…と思います。今は正直そういった部分しか貢献できる部分がないのですが、今後もっとなんとかCrieitを発展させて、多くのことを提供できるようにしていきたいと思っています。</p> <h2 id="Advent Calendarを開催してのデータ"><a href="#Advent+Calendar%E3%82%92%E9%96%8B%E5%82%AC%E3%81%97%E3%81%A6%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF">Advent Calendarを開催してのデータ</a></h2> <p>大雑把な集計ですが、だいたい11月の倍程度のアクセスがありました(とはいえ元々多かったわけではないのでものすごい量というわけではありません。あとこれを書いている当日バズっている記事があるためだいぶ変わってきているかもしれません)。やはりとにかく毎日投稿があるというのはかなりの多くのメリットですね。</p> <p>単純に記事が増えること自体にメリットがありますし、それに付随して、僕や投稿者自身が紹介のツイートをすることで盛り上がったきがします。そもそも毎日2記事ペースでそれができていたので、途中からどの記事がいつの記事なのかどっちのカレンダーの記事なのかもうよく分からない感じでツイートをしていました。なんにしろ紹介できるものが毎日あるというのは嬉しいことでした。</p> <p>Twitter上で広がった数も多かったような印象があります。普段僕が自分で投稿していても、RTはつくかつかないか、いいねも数回つくかどうか、みたいな感じです。でもAdvent Calendar開催中はどの投稿の紹介ツイートも何度もRT以上されたりする事が多く、10RT以上の方も何回かありました。そもそも僕のツイートだけでなく、本人のツイートや、誰かがシェアしてくれたツイートなども含めると更に多くなっていました。そんな感じでSNS上でも普段よりは賑わっていた感じがありました。</p> <h2 id="来年やりたいこと"><a href="#%E6%9D%A5%E5%B9%B4%E3%82%84%E3%82%8A%E3%81%9F%E3%81%84%E3%81%93%E3%81%A8">来年やりたいこと</a></h2> <p>Advent Calendarを来年やるかは特に決めていませんが、機能自体が消えるわけではないので特に問題なければまたやろうかな、とは思っています。ただ、ちょっと今年は僕自身が色々気にしたり稼働したりしすぎて辛い部分があったので、あまり僕自身は関わらず、Qiitaのようにモチベーションのあるユーザーが自由にカレンダーを作って自由に運用する、の様な形でできればな…と思っています。</p> <p>あと、こういったイベント開催中は良いのですが、普段やはり自分的にもユーザー的にもCrieit上でできることが少なく、「居場所」としては成り立ちにくいです。そのためボード機能という大きな機能をリリースし、ユーザーが年がら年中Crieitを居場所にし、好き勝手にお祭り騒ぎできるようにできればいいな、と思っています。詳しくは下記の記事で先日書いていますので、もしご興味があればご覧ください。</p> <p><a href="https://crieit.net/posts/Criet">Crieitに大きい機能で次追加したいもの</a></p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>とにかく毎日感謝の1ヶ月でした。感謝の個人開発600時間でした。これだけ毎日大勢の方に感謝をし続けた月というのは生まれてはじめてだと思います。僕自身にとっても本当に良い経験となりました。</p> <p>ご協力、ご参加、そして見て頂いた皆様、ほんとうにありがとうございました。今年も残り少しとなりましたが良いお年をお過ごしください。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/14681 2018-12-22T00:27:33+09:00 2018-12-24T15:29:58+09:00 https://crieit.net/posts/1ce4e541fb35fa1b2fda13fc31b54a6a ランニングと1年の振り返り <p>この記事は、<a href="https://crieit.net/advent-calendars/2018/crieit">Crieitのアドベントカレンダー Advent Calendar 2018</a> 22日目の記事になります。</p> <h2 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h2> <p>私にとってこの一年はフリーランスを始めた年であり、<br /> 「年で合計400㌔走る!」という目標を掲げた年でもありました。</p> <p>結果としては21日時点で402㌔。無事達成できました!</p> <p>せっかくなのでデータを見つつ、今年を振り返ってみます。</p> <h2 id="ランニング開始の背景"><a href="#%E3%83%A9%E3%83%B3%E3%83%8B%E3%83%B3%E3%82%B0%E9%96%8B%E5%A7%8B%E3%81%AE%E8%83%8C%E6%99%AF">ランニング開始の背景</a></h2> <p>妻に脇腹をつねられ「あれ?なんか付いてる。。!」という発言から。<br /> とりあえず目標を建てないと続かないと思い、<br /> 週の半分で2キロ走ることができたら、400㌔いけるなという概算で設定。</p> <h2 id="データの計測について"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E8%A8%88%E6%B8%AC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">データの計測について</a></h2> <p>runtasticというスマホのアプリを利用していました。</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.runtastic.com/ja/">https://www.runtastic.com/ja/</a></p> <p>GPSを有効にしてアプリを起動して走ると、時間や走行距離を計測してくれます。<br /> 1キロ毎に走行時間をアナウンスをしてくれるのでペースを維持するのに良かったです。</p> <p>アプリのサイトに行くと、データがエクスポートできるのでそこからダウンロードしました。</p> <p><a href="https://crieit.now.sh/upload_images/7a00187d544d7eab14e9365c5a73e1ff5c1d04f925bb1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7a00187d544d7eab14e9365c5a73e1ff5c1d04f925bb1.png?mw=700" alt="image.png" /></a></p> <h2 id="利用したデータ"><a href="#%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E3%83%87%E3%83%BC%E3%82%BF">利用したデータ</a></h2> <p>経緯度だけマスキングしてこちらにあります。良かったら利用してみてください。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/u110/my_runtastic_data">https://github.com/u110/my_runtastic_data</a></p> <p>※ 目標達成する前にダウンロードしたデータなので、400㌔届いておらず。</p> <p>この後コード片を載せますが、分析に用いたコードもリポジトリにあります。</p> <h2 id="データ構成"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E6%88%90">データ構成</a></h2> <p>1回のランニングあたりの<br /> - 経緯度<br /> - 開始時刻<br /> - 走行距離</p> <p>があったので今回はそれのみ。</p> <p>他にも毎分あたりの経緯度やペースなども見れるようです。<br /> コードの一部</p> <pre><code class="python">dat = preprocess(df) # 前処理を行ったDataFrameを返す関数を用意 dat.head() </code></pre> <p>出力結果<br /> <a href="https://crieit.now.sh/upload_images/7a00187d544d7eab14e9365c5a73e1ff5c1d057191471.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7a00187d544d7eab14e9365c5a73e1ff5c1d057191471.png?mw=700" alt="image.png" /></a></p> <h2 id="ヒストグラム"><a href="#%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0">ヒストグラム</a></h2> <p>まずは1変数のヒストグラムを見ましょう。<br /> データのプロットはpythonで書いています(全コードはgithubリポジトリにあります)</p> <pre><code class="python"># 走行距離分布(単位:メートル) # 3, 4キロあたりが多い。 dat.distance.hist() </code></pre> <p><a href="https://crieit.now.sh/upload_images/7a00187d544d7eab14e9365c5a73e1ff5c1d05e13c935.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7a00187d544d7eab14e9365c5a73e1ff5c1d05e13c935.png?mw=700" alt="image.png" /></a></p> <pre><code class="python"># ランニング開始時間 基本的に6-7時台 dat.shour.hist() </code></pre> <p><a href="https://crieit.now.sh/upload_images/7a00187d544d7eab14e9365c5a73e1ff5c1d05fbaba15.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7a00187d544d7eab14e9365c5a73e1ff5c1d05fbaba15.png?mw=700" alt="image.png" /></a></p> <h2 id="swarmplot"><a href="#swarmplot">swarmplot</a></h2> <p>日本語だと蜂群図(bee swarm plot)というらしいです。<br /> データの個数やばらつぎ具合が把握できるので便利です。<br /> (データ増えると描画に時間かかるので注意)</p> <pre><code class="python"># 1回あたりの走行距離の分布 sns.swarmplot(x="smonth", y="distance", data=dat) </code></pre> <p><a href="https://crieit.now.sh/upload_images/7a00187d544d7eab14e9365c5a73e1ff5c1d060d922a1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7a00187d544d7eab14e9365c5a73e1ff5c1d060d922a1.png?mw=700" alt="image.png" /></a></p> <h2 id="データを見た気づき"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E8%A6%8B%E3%81%9F%E6%B0%97%E3%81%A5%E3%81%8D">データを見た気づき</a></h2> <ul> <li><p>時系列でみると、1回に走る距離が伸びている</p> <ul> <li>見るまでもなく実感はあった。</li> <li>年の始めは2キロでへばっていたが、夏場は帰省先(長野県)が快適だったのもあり結構走れていた。</li> </ul></li> <li><p>4, 7, 11, 12月で走る回数が減っている</p> <ul> <li>そういえば、4月は仕事でもやもやしていた時期でしたw</li> <li>7月は息子爆誕。パパ業が開始した月でした。</li> <li>冬は寒い。。朝布団から出られないw</li> </ul></li> <li><p>5月、9月で持ち返している</p> <ul> <li>5月で産休の妻と実家に帰省。仕事もセーブしていたので暇だったw</li> <li>9月はDevelopers JPに参加。slackの筋トレチャンネルで報告を始めたのが良かったのかも</li> <li>Djpの人めっちゃ褒めてくれるので頑張れる。</li> </ul></li> </ul> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <ul> <li>走れている月は仕事やプライベートの調子も良かった。</li> <li>応援もらえるの嬉しい。</li> <li>データ溜まっていくと分析しがいがありそう。</li> </ul> <p>他の情報についてはまだ見れていないので<br /> 時間見つけて触ってみたいです。pull requestくれても良いですよ!?</p> <p>簡単ですが、以上になります。お読みいただきありがとうございました!</p> <p>次のエントリをお楽しみに!!</p> <h2 id="余談: あれ?makeの話は?"><a href="#%E4%BD%99%E8%AB%87%3A+%E3%81%82%E3%82%8C%EF%BC%9Fmake%E3%81%AE%E8%A9%B1%E3%81%AF%EF%BC%9F">余談: あれ?makeの話は?</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/u110/my_runtastic_data/blob/master/Makefile">https://github.com/u110/my_runtastic_data/blob/master/Makefile</a></p> <p>経緯度の情報をマスキングする処理だけ書きましたが、<br /> 物足りなかったのでデータ分析にしましたw</p> u110 tag:crieit.net,2005:PublicArticle/14589 2018-10-31T23:47:20+09:00 2018-11-04T13:26:23+09:00 https://crieit.net/posts/Advent-Calendar-5bd9c0788ca7e Advent Calendarを開始しました <p>CrieitでAdvent Calendar機能をリリースし、参加者の募集を開始しました。</p> <p><a href="https://crieit.now.sh/upload_images/c1b5c8959711eb7a1a32a1a1d095556c5bd9bdec9ca15.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c1b5c8959711eb7a1a32a1a1d095556c5bd9bdec9ca15.png?mw=700" alt="アドベントカレンダー Advent Calendar 2018 Crieit.png" /></a></p> <p>アドベントカレンダーというのはクリスマスまでの日数を数えながら過ごすイベントのことで、毎年QiitaやAdventarで記事を書くお祭りイベントとして開催されています。そのイベントをCrieitでも開催してみることにしました。</p> <p>今年は2つのカレンダーを作成してあります。</p> <h2 id="Crieit Advent Calendar"><a href="#Crieit+Advent+Calendar">Crieit Advent Calendar</a></h2> <p>とりあえずやってみようということで作成したカレンダーです。</p> <p><a href="https://crieit.net/advent-calendars/2018/crieit">https://crieit.net/advent-calendars/2018/crieit</a></p> <p>こちらは特にテーマはなく、Crieitの趣旨にあったものであればどんなものでも投稿可能です。アドベントカレンダーの練習や数行の投稿でも全然OKです。</p> <h2 id="個人開発サービスに用いられている技術"><a href="#%E5%80%8B%E4%BA%BA%E9%96%8B%E7%99%BA%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AB%E7%94%A8%E3%81%84%E3%82%89%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E6%8A%80%E8%A1%93">個人開発サービスに用いられている技術</a></h2> <p><a href="https://crieit.net/advent-calendars/2018/technology">https://crieit.net/advent-calendars/2018/technology</a></p> <p>個人開発者が自分のサービスの技術を公開してくれたら面白いのでは、という声をうけ急遽作成しました。</p> <p>何か開発されている方ということにはなりますので誰でもというわけにはいきませんが、どんなちょっとしたものでも良いので何か作られている方がいれば是非ご参加ください。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>とにかく初ということで、且つCrieitもまだまだ小さなサービスですので、カレンダーが埋まるというところまでは想像していません。とにかく一人でも多くの方にご参加いただき少しでも楽しんでいただければな、と考えています。</p> <p>開発者もどのような投稿でも非常に嬉しいですし、楽しみに見させていただきますので是非ご参加のほどよろしくお願いいたします。</p> Crieit=コミュニティlike(Qiita+dev.to)/3公式 tag:crieit.net,2005:PublicArticle/14534 2018-09-12T22:21:23+09:00 2018-10-28T23:51:31+09:00 https://crieit.net/posts/12-Advent-Calendar 12月にAdvent Calendarの開催を予定しています <p>Advent Calendarとは、Web界隈では12/1~12/25まで毎日1記事ずつ記事を公開していくイベントです。Crieitでも開催してみたいと思います。</p> <p>ご存知の方も多いとは思いますが、毎年QiitaやAdventarにて恒例で開催されており、たくさんの記事が集まり非常に盛り上がっています。どちらも毎年参加者もカレンダーも増えているようです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/advent-calendar">Qiita Advent Calendar</a></p> <p><a target="_blank" rel="nofollow noopener" href="https://adventar.org/">Adventar</a></p> <p>ちなみに元々の意味としてはクリスマスまでの日数を楽しみながら数えるためのもので、子ども向けに毎日一つずつお菓子が入ったセットなどもよく売られています。</p> <h2 id="仕様"><a href="#%E4%BB%95%E6%A7%98">仕様</a></h2> <h3 id="大まかには"><a href="#%E5%A4%A7%E3%81%BE%E3%81%8B%E3%81%AB%E3%81%AF">大まかには</a></h3> <p>Qiitaのような機能を想定しています。</p> <h3 id="カレンダーは1つ"><a href="#%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC%E3%81%AF1%E3%81%A4">カレンダーは1つ</a></h3> <p>まだ開発者以外に記事を投稿してくださる方が多いわけではないため、カレンダーは1つ、計25日分の予定です。空いた日は全て開発者が埋める予定です。</p> <p>ジャンルは問いません。練習でも議論でもポエムでもOKです。</p> <p>一応11月になったら募集を開始してみるため、万が一埋まるようであればもう一つくらい増やすかもしれません。</p> <h3 id=" "><a href="#+"> </a></h3> <h2 id="余裕があれば実装する機能"><a href="#%E4%BD%99%E8%A3%95%E3%81%8C%E3%81%82%E3%82%8C%E3%81%B0%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B%E6%A9%9F%E8%83%BD">余裕があれば実装する機能</a></h2> <p>大きなサービスであれば必要な機能だと思いますが、現状だとあまり必須という感じではなく、無くても運用できるため余力があれば作成する機能です。</p> <h3 id="予約投稿"><a href="#%E4%BA%88%E7%B4%84%E6%8A%95%E7%A8%BF">予約投稿</a></h3> <p>事前に下書き状態でカレンダーに登録しておくと、予定した日になったタイミングで自動的に公開される機能です。</p> <h3 id="通知機能"><a href="#%E9%80%9A%E7%9F%A5%E6%A9%9F%E8%83%BD">通知機能</a></h3> <p>Advent Calendar上で記事が公開されるとWeb Pushにて通知が行われる機能です。(通知を受け取りたい方はユーザー登録してPush通知を有効にしておく必要があります)</p> <h2 id="不要そうな機能"><a href="#%E4%B8%8D%E8%A6%81%E3%81%9D%E3%81%86%E3%81%AA%E6%A9%9F%E8%83%BD">不要そうな機能</a></h2> <p>Qiitaと比べて、現状のCrieitだと不要そうな機能もあるためこのあたりは実装しないと思います。</p> <ul> <li>フィード(トップページでまかなえる)</li> <li>カレンダーの作成</li> <li>ランキング</li> </ul> <p>等</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>このような形で開催していきたいと考えています。</p> <p>今のところ全部埋まらない可能性も非常に高い(というか投稿が一切ない可能性もる)ため、空いた日は全て開発者が埋める予定です。開発者も普段からあれこれ開発したり記事を投稿したりする必要があるため恐らくAdvent Calendar用に記事をストックしておく余裕もなく、12月はデスマーチになる予定ですので、気が向いたら是非ご協力をお願いいたします!</p> Crieit=コミュニティlike(Qiita+dev.to)/3公式 tag:crieit.net,2005:PublicArticle/14234 2017-12-23T06:27:15+09:00 2018-09-20T13:44:09+09:00 https://crieit.net/posts/Go-glide-Wercker-CI Goのglide環境にてWerckerのCI導入 <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/advent-calendar/2017/go3">Go3 Advent Calendar 2017 - Qiita</a></p> <p>23日目</p> <p>GoのアプリケーションのリポジトリをBitBucketに作っているので、WerckerでのCIを試した。</p> <p>シンプルで綺麗なパスでアプリケーションを作っている場合、<br /> 多分Werckerにてアプリケーションを登録する際に表示されるサンプルそのままのwercker.ymlでそのまま動くのではないかと思う。</p> <p>ただ、今回のアプリケーションはパッケージ管理にglideを使っているのでそのままでは動かない。<br /> ちなみにフォルダ構成としては、下記に降りたところにアプリケーションが入ってる。</p> <pre><code>/src/myapp </code></pre> <p>Dockerコンテナ内では上記のルートをGOPATHとしている。ちょっと変な構成。</p> <p>とりあえず動くところまでを調整してみた。<br /> とりあえずなので変な感じになっている。</p> <pre><code class="yaml">box: golang build: steps: - setup-go-workspace - script: name: install glide code: | curl https://glide.sh/get | sh # Gets the dependencies - script: name: glide install cwd: src/crawler/ code: | glide install # Build the project - script: name: go build cwd: src/crawler/ code: | export GOPATH=/go/src/bitbucket.org/myaccount/myapp go build # Test the project - script: name: go test cwd: src/crawler/ code: | export GOPATH=/go/src/bitbucket.org/myaccount/myapp go test $(glide novendor) </code></pre> <p>細かいところを補足していくと、まずglideのドキュメント通りにインストール</p> <pre><code class="sh">curl https://glide.sh/get | sh </code></pre> <p>最初に書いたとおりパスがちょっと違うので合わせる。</p> <pre><code class="sh">cwd: src/crawler/ code: | glide install </code></pre> <p>パッケージの位置がずれて読み込めていなかったので、exportでGOPATHを指定している。<br /> (ymlの設定であるかも?)</p> <p>プロジェクトの環境変数を設定すると今度はglideのインストールとかがうまくいかなくなるのでここで指定している。</p> <pre><code>cwd: src/crawler/ code: | export GOPATH=/go/src/bitbucket.org/myaccount/myapp go build </code></pre> <p>こんな感じで通った。</p> <p>あとはパイプラインでデプロイの処理などと繋げれば楽だと思う。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/14237 2017-12-19T06:24:49+09:00 2018-10-24T21:37:00+09:00 https://crieit.net/posts/Systemd-Phoenix Systemdを使ったPhoenixの本番デプロイ詳細例 <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/advent-calendar/2017/elixir">Elixir Advent Calendar 2017 - Qiita</a></p> <p>19日目。</p> <p>サーバーを準備し、コンテナを使わずに運用できるところまでの準備まで一通りまとめてみた。<br /> Systemdで動作させる。</p> <p>(以前残したログをまとめているだけなので正確でない可能性あり)</p> <h3 id="前提"><a href="#%E5%89%8D%E6%8F%90">前提</a></h3> <ul> <li>Elixir1.5</li> <li>Phoenix1.3</li> <li>Debian</li> </ul> <h3 id="初期設定"><a href="#%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A">初期設定</a></h3> <p>最初だけ本番で調整したものをコミットしたりもするのでgitもちょっと設定。</p> <pre><code class="sh">sudo apt-get update sudo apt-get install -y git dbus sudo timedatectl set-timezone Asia/Tokyo git config --global user.name "name" git config --global user.email "email" </code></pre> <h3 id="Elixir &amp; Phoneix &amp; Node.js"><a href="#Elixir+%26amp%3B+Phoneix+%26amp%3B+Node.js">Elixir & Phoneix & Node.js</a></h3> <pre><code class="sh">curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb sudo apt-get update sudo apt-get install -y nodejs inotify-tools esl-erlang elixir mix local.hex --force mix local.rebar --force mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez --force sudo apt-get install --reinstall build-essential </code></pre> <h3 id="DB"><a href="#DB">DB</a></h3> <p>MySQLとかPostgreSQLとか。<br /> 普通は別サーバーだろうし省略。</p> <h3 id="ビルド"><a href="#%E3%83%93%E3%83%AB%E3%83%89">ビルド</a></h3> <p>ssh-keygenかtokenかでcloneできるように準備。<br /> 適当なので環境変数とかユーザーは適宜いい感じにしてもらった方が良いかもしれない。</p> <pre><code class="sh">git clone ********.git cd appdir mix deps.get --only prod sudo MIX_ENV=prod mix compile cd assets npm install sudo npm install -g brunch brunch build --production cd .. sudo MIX_ENV=prod mix phx.digest sudo MIX_ENV=prod mix ecto.migrate sudo MIX_ENV=prod mix phx.server </code></pre> <p>とりあえずここまでで動くか確認する。</p> <h3 id="Let's Encrypt"><a href="#Let%27s+Encrypt">Let's Encrypt</a></h3> <p>省略。下記の記事に一応詳細は書いてある。</p> <p><a target="_blank" rel="nofollow noopener" href="http://alphabrend.hatenablog.com/entry/2017/10/10/214222">PhoenixでLet's EncryptによるSSL - アルファブレンド プログラミングチップス</a></p> <h3 id="Systemd"><a href="#Systemd">Systemd</a></h3> <pre><code class="sh">sudo vi /etc/systemd/system/myapp.service </code></pre> <pre><code class="ini">[Unit] Description=My app [Service] WorkingDirectory=/home/username/appdir Restart=always Environment=MIX_ENV=prod HOME=/root ExecStart=/usr/local/bin/mix phx.server [Install] WantedBy=multi-user.target </code></pre> <pre><code class="sh">sudo systemctl enable cybozulive sudo systemctl start cybozulive </code></pre> <h3 id="運用"><a href="#%E9%81%8B%E7%94%A8">運用</a></h3> <p>pull, compile, brunch build, digest, migrate, restart</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/14239 2017-12-05T07:03:13+09:00 2018-10-31T17:45:36+09:00 https://crieit.net/posts/e379835214e697a4af50e463d7a73400 個人開発のだいたいの流れの例 <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/advent-calendar/2017/private-development">個人開発 Advent Calendar 2017 - Qiita</a></p> <p>の5日目。</p> <h3 id="概要"><a href="#%E6%A6%82%E8%A6%81">概要</a></h3> <p>普段から時間があればプログラミングで遊びつつ何か作成している。<br /> せっかくなので誰も使わなくてもリリースしたりしていて、<br /> それらは特に仕事でやっているのとかけ離れているものではないので、<br /> 適当に箇条書き程度で紹介。</p> <h3 id="今作っているもの"><a href="#%E4%BB%8A%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%82%82%E3%81%AE">今作っているもの</a></h3> <p>ちょっと前にサイボウズLiveが終了すると発表された。<br /> 自分も丁度お客さんが使っていてそこでやり取りをしていた。<br /> 丁度Elixir & Phoenixを使って色々遊んでいたところに飛び込んできたニュースで、<br /> 丁度別のアプリケーションをキリのいいところまで作り終えたところだったので、<br /> サイボウズLiveをコピーして作ってみようと思い作成中。</p> <p>成果物は下記。</p> <p><a target="_blank" rel="nofollow noopener" href="https://live.alphabrend.com">Copying live</a></p> <p>ちなみに当ブログで連載中。</p> <p><a target="_blank" rel="nofollow noopener" href="http://alphabrend.hatenablog.com/archive/category/%E3%82%B5%E3%82%A4%E3%83%9C%E3%82%A6%E3%82%BALive%E3%82%92%E4%BD%9C%E3%82%8B">サイボウズLiveを作る カテゴリーの記事一覧 - アルファブレンド プログラミングチップス</a></p> <h3 id="進め方"><a href="#%E9%80%B2%E3%82%81%E6%96%B9">進め方</a></h3> <p>とりあえずどんどん出来ていくのが楽しいので、細かいところは無視してどんどん自分のやりたいところを先に進める。<br /> 細かいところは後回し。<br /> 今もデータ登録が中心で削除等の細かい機能は放置している。</p> <h3 id="デザイン"><a href="#%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3">デザイン</a></h3> <p>デザイナーじゃないのでやっぱりBootstrap。<br /> 特に</p> <p><a target="_blank" rel="nofollow noopener" href="https://fezvrasta.github.io/bootstrap-material-design/">Bootstrap</a></p> <p>がおしゃれで何にでも使えるので良いと思う。<br /> JavaScriptのフレームワーク毎にMaterial Desginのライブラリがあったりもするのでそういうのでもいい。</p> <h3 id="とりあえずの画面"><a href="#%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9A%E3%81%AE%E7%94%BB%E9%9D%A2">とりあえずの画面</a></h3> <p>掲示板</p> <p><a href="https://crieit.now.sh/upload_images/2d38283e660a7c0117faeae103135a165b0d18736371a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2d38283e660a7c0117faeae103135a165b0d18736371a.png?mw=700" alt="" /></a></p> <p>Todo</p> <p><a href="https://crieit.now.sh/upload_images/a028542c2b31eaf44e1964a5fff3a0ab5b0d1873d7096.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a028542c2b31eaf44e1964a5fff3a0ab5b0d1873d7096.png?mw=700" alt="" /></a></p> <h3 id="エディタ"><a href="#%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF">エディタ</a></h3> <p>Visual Studio Code</p> <p>今のところ知っている中では軽量&高機能&設定手軽なものでベストだと思う。</p> <h3 id="開発環境"><a href="#%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83">開発環境</a></h3> <p>docker-composeを使う。Linux Mintなのでただインストールして使うだけ。</p> <p>Elixir & Phoenixだと下記のような感じ。<br /> 見てのとおりだがPhoenix & MySQL & phpMyAdmin。<br /> Phoenixのイメージは誰かがどこかで公開していたのを参考にしただけのもの。</p> <pre><code class="yaml">version: '2' volumes: mysql_data: driver: 'local' services: mysql: image: mysql:8.0 volumes: - mysql_data:/var/lib/mysql ports: - "3310:3306" environment: MYSQL_ALLOW_EMPTY_PASSWORD: "true" phpmyadmin: image: phpmyadmin/phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=root - PMA_PASSWORD= ports: - 8100:80 cybozulive: image: dala00/phoenix:1.3.0 env_file: .docker-env volumes: - .:/var/opt/app ports: - "4000:4000" tty: true stdin_open: true </code></pre> <h3 id="ソース管理"><a href="#%E3%82%BD%E3%83%BC%E3%82%B9%E7%AE%A1%E7%90%86">ソース管理</a></h3> <p>自分の場合、ソースを公開していいならGitHubに置くし、<br /> 多少大きくてあまり公開したくないものはBitbucketに置いている。<br /> (Bitbucket最近重い気がするけど)</p> <h3 id="フロント"><a href="#%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88">フロント</a></h3> <p>Vueを使っている。<br /> Phoenixは最初からbrunchが入っているのでVueを入れたらそのまま使える。<br /> Phoenixの開発サーバーに元々ウォッチ機能がついていて、htmlもcssもJavaScriptも全部保存時に勝手に画面を更新してくれるので何も考える必要がない。<br /> そのためjQueryを使う意味すら無いしもう全員Vueで良いと思う。<br /> なにより簡単に適当に一部のみコンポーネント化できるのが最高。</p> <p>PHPならLaravelも最初からVueが使える。<br /> もしフレームワークに何もついてなくてもwebpack導入してwatchするだけなのでとりあえずもうVueを使っておけばいいと思う。</p> <h3 id="公開"><a href="#%E5%85%AC%E9%96%8B">公開</a></h3> <p>せっかく作ったならぐちゃぐちゃでも公開していったらいいと思う。</p> <p>僕の場合、PHPならさくらのスタンダードを1つ借りてるのでそちらにアップして公開する。<br /> (バージョン上げると動かなくなるものも入っているのでもうひとつ借りたくなるところ…)</p> <p>それ以外の場合、VPSとかでも1アプリケーションごとに500円とか千円とかかかってしまい、<br /> 積み重なっていくとモチベーションに影響してしまうので、最近だと全部GCEの無料のプラン。<br /> Herokuでも良いかもしれないがどうもDBの接続が安定しないようなのでちょっと不安。</p> <p>Phoenixのデプロイ方法はAdvent Calendarの別の記事で紹介する予定。</p> <p>あとSSLは例えしょうもないアプリでももう必須だと思う。<br /> 焦らずにリリース前の、失敗してサーバーをぐちゃぐちゃにしても問題ないタイミングでちゃんと設定しておきたい。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/14281 2016-12-23T07:11:56+09:00 2018-10-30T17:16:13+09:00 https://crieit.net/posts/df3088eacde96675b1335d507092e315 会話のかみ合わないチャットボットを作った <h3 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h3> <p><a target="_blank" rel="nofollow noopener" href="http://qiita.com/advent-calendar/2016/chatbot">チャットボット Advent Calendar 2016 - Qiita</a></p> <p>21日目</p> <h3 id="チャットボット"><a href="#%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%83%9C%E3%83%83%E3%83%88">チャットボット</a></h3> <p>適当にチャットボットを作ってみた。<br /> 本当は作るのが面倒だったので適当なAPI等は無いかと思ったが、<br /> どうも登録に時間がかかったり費用がかかったり、<br /> 会話の流れを自分で登録していかなければならないものなどばかりだったため、<br /> 適当に作ってみることにした。</p> <h3 id="アルゴリズム"><a href="#%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0">アルゴリズム</a></h3> <p>調べてみると下記のようなページがあった。</p> <p><a target="_blank" rel="nofollow noopener" href="http://d.hatena.ne.jp/itog/20090613/1244905238">マルコフモデルを使った人工無能の作り方 - Hacking My Way ~ itogのhack日記</a></p> <p>マルコフモデルというのを使うと会話が自動で生成できるらしく、<br /> 見て見る限り適当にデータをMySQLに保存していけばできそうだったのでこれでやってみることにした。<br /> 最近はやりの機械学習ライブラリなどは使っていない。</p> <p>学習プログラムはpythonで作った。<br /> そのうちTensorFlowなどを使う場合があればpythonがいいかと思ったが、<br /> 別に今回は小さなプログラムだったので結局何でも良かった。</p> <h3 id="学習"><a href="#%E5%AD%A6%E7%BF%92">学習</a></h3> <p>適当な会話データなどを拾って学習させてみた。<br /> サーバーだとお金がかかるのでとりあえずある程度はPC上でDBに貯めこむ。<br /> 100ちょっとのファイルの会話データで、PCつけっぱなしで1週間ほどかかった。<br /> HDDの寿命がだいぶ縮まったのではないだろうか…。</p> <h3 id="チャットアプリケーション"><a href="#%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3">チャットアプリケーション</a></h3> <p>CakePHP3とAngularで作成した。<br /> 返事はpythonで作っていたのでコマンドを呼び出して連携している。</p> <p><a target="_blank" rel="nofollow noopener" href="https://alphabrend.sakura.ne.jp/ai_chat_front/">AiChatFront</a></p> <h3 id="LINE ボット"><a href="#LINE+%E3%83%9C%E3%83%83%E3%83%88">LINE ボット</a></h3> <p>Message APIをつかってLINEボットも作ってみた。</p> <p><a href="https://crieit.now.sh/upload_images/d34742b2f92530023a20e073c378ecaf5b0d18985aad2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d34742b2f92530023a20e073c378ecaf5b0d18985aad2.png?mw=700" alt="" /></a></p> <h3 id="Androidアプリ"><a href="#Android%E3%82%A2%E3%83%97%E3%83%AA">Androidアプリ</a></h3> <p>CordovaでAndroidアプリも作ってみた。<br /> ちなみにAndroidアプリの場合はボットが音声で話すので注意。<br /> 自分も声で話すことができる。</p> <p><a target="_blank" rel="nofollow noopener" href="https://play.google.com/store/apps/details?id=com.alphabrend.aichat"></a></p> <h3 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h3> <p>やってみたが話はかみ合わない。<br /> たまにドキッとする発言をするが。<br /> もうちょっと調整や学習を増やせばもうちょっとまともになるかもしれない。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/14282 2016-12-22T05:55:55+09:00 2018-08-15T11:34:35+09:00 https://crieit.net/posts/cakephp-migrations cakephp/migrationsにプルリクエストを送った <h3 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h3> <p><a target="_blank" rel="nofollow noopener" href="http://qiita.com/advent-calendar/2016/cakephp3">CakePHP3 Advent Calendar 2016 - Qiita</a></p> <p>20日目が空いていたので。</p> <h3 id="内容"><a href="#%E5%86%85%E5%AE%B9">内容</a></h3> <p>CakePHP3のマイグレーションにはmigration_diffという機能があり、<br /> 差分から自動的にマイグレーションファイルを作ってくれる超便利な機能がある。</p> <p>ただ1点、<br /> afterオプションだけ自動的につけてくれない、<br /> という仕様だったのがずっと気になっていた。</p> <p>気になってソースを調べてみると、<br /> なんとなく可能なんじゃないか、という感じに見えた。<br /> でも付けられていないということは何か理由でもあるのだろうか?</p> <p>と思いつつ対応してみたら簡単にafterをつけることができた。<br /> せっかくなのでテストも作成し、issueでPRしていいか聞いてみたところOKが出たのでPR。<br /> Milestoneにも入ったので問題なければ恐らくマージされるのではないかと思う。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/cakephp/migrations/pull/281">Add 'after' attribute to migration_diff by dala00 · Pull Request #281 · cakephp/migrations · GitHub</a></p> <p>ちなみにafterが無いのは特に理由はなくまだだれも対応していなかっただけだった。</p> <h3 id="テスト方法"><a href="#%E3%83%86%E3%82%B9%E3%83%88%E6%96%B9%E6%B3%95">テスト方法</a></h3> <p>migration_diffのテストは、実行後git statusしてみるとだいたい分かるが、<br /> マイグレーションファイルが作成され、それを想定される出力結果ファイルと比較する、というもの。<br /> MySQLやPostgresでファイルが分かれているのでそれぞれテストして出力結果ファイルを修正する。</p> <p>そのあたりをきちっとやったら後は環境依存のエラーやよくわからないものが出るので、<br /> forkしたリポジトリをTravis CIでチェックして本家と同じ感じになればOKだと思われる。<br /> PRした時も同様のチェックが自動的に行われる。</p> <h3 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h3> <p>せっかくのオープンソースなので気になったり不足を感じる点があったら是非PRしてみた方が良い。<br /> あとはマージされることを祈るばかり。</p> <p>ちなみに仕事場ではもう勝手に修正をあてている。<br /> もしマージされなかったら永久に自分で修正し続けるしかない。</p> <p>追記)マージされました。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/14283 2016-12-16T09:01:13+09:00 2018-10-24T18:57:24+09:00 https://crieit.net/posts/Atom-pull-request Atomのパッケージにpull requestを送った話 <h3 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h3> <p><a target="_blank" rel="nofollow noopener" href="http://qiita.com/advent-calendar/2016/atom">Atom Advent Calendar 2016 - Qiita</a></p> <p>16日目</p> <h3 id="Atomについて"><a href="#Atom%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">Atomについて</a></h3> <p>Atomはご存知の通りGithubでも公開されているオープンソースのエディタで、<br /> 連携するパッケージも全て同様。</p> <p>つまり、何か不便を感じた時、通常のアプリケーションのように要望を出してそれが通ったものがリリースされるまで待つ、<br /> 等ということをする必要がない。<br /> 自分で改造すればいい。</p> <p>せっかく改造したなら、pull requestを送ってみるのが良いと思う。<br /> 受け入れて貰えれば今後のアップデートで反映される。</p> <p>2回ほどpull requestを送ったのでその時の話。<br /> どちらも小さなプロジェクトだったのでテストも書かず、すんなりと受け入れてもらえた。</p> <h3 id="remote-ftp"><a href="#remote-ftp">remote-ftp</a></h3> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/mgrenier/remote-ftp">GitHub - icetee/remote-ftp: FTP/FTPS/SFTP client for Atom.io</a></p> <p>Atom上でSCPでファイル転送できるパッケージ。</p> <p>ローカルでファイルを編集して保存した時、自動的にアップロードしてくれる機能があるので使っていた。</p> <p>しかし、その用途のみの利用だとリモートのツリービューが邪魔なので、デフォルトで非表示にできないか試したところ、できた。<br /> ただ、アップデートがくると修正した箇所も消えてしまうので、<br /> せっかくだからpull requestしてみようと思いデフォルトで非表示にするかどうかの設定をつけて、<br /> 既存のユーザーに影響が無いようにして送ってみたところマージしてもらえた。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/mgrenier/remote-ftp/commit/b691126c0300810eb363cfb30401d71d9812d2eb">Merge pull request #236 from dala00/showViewOnStartup · icetee/remote-ftp@b691126 · GitHub</a></p> <h3 id="symbols-tree-view"><a href="#symbols-tree-view">symbols-tree-view</a></h3> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/xndcn/symbols-tree-view">GitHub - xndcn/symbols-tree-view: A symbols view like taglist for Atom.io</a></p> <p>ソース中の関数などの一覧が表示され、クリックですぐその位置に飛べる便利なパッケージ。</p> <p>便利なのだが、当初はファイルを開く度にソート順を変更せねばならず、<br /> なんとなく微妙に面倒というか使いづらいという感じだった。<br /> 何でもいいから強制的に名前順にソートできないか? と思い試したところ、できた。</p> <p>せっかくだからこれもpull requestしてみようと思い、<br /> 強制的に名前順にする処理を、現在のコードの種類で設定できるようにして、<br /> 既存のユーザーに影響が無いようにして送ってみたところマージしてもらえた。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/xndcn/symbols-tree-view/commit/e71d465e9e0c519b577f7c50a4727fcc0738b758">Merge pull request #82 from dala00/sortByNameScopes · xndcn/symbols-tree-view@e71d465 · GitHub</a></p> <h3 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h3> <p>このように自分で拡張していけるのでとても面白い。<br /> 一度やってみると今度はもっと別のプロジェクトなどにも貢献してみたくなるので趣味の幅が広がるだろう。</p> <p>ちなみにどちらも不具合というか不足点があったので修正のプルリクエストをしている。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/14284 2016-12-10T09:01:47+09:00 2018-10-23T13:10:59+09:00 https://crieit.net/posts/48784716063587cab91c52ffe2e32904 在宅エンジニアと子育て <h3 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h3> <p><a target="_blank" rel="nofollow noopener" href="http://qiita.com/advent-calendar/2016/kosodate-engineer">子育てエンジニア Advent Calendar 2016 - Qiita</a></p> <p>10日目。</p> <h3 id="年表"><a href="#%E5%B9%B4%E8%A1%A8">年表</a></h3> <ul> <li>2012年 長男誕生。週5在宅。</li> <li>2014年 次男誕生。</li> <li>2016年 常駐週3、在宅週2(現在)</li> </ul> <h3 id="長男が生まれてからやるようになったこと"><a href="#%E9%95%B7%E7%94%B7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%8B%E3%82%89%E3%82%84%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8">長男が生まれてからやるようになったこと</a></h3> <ul> <li>洗濯もの干し、取り込んで片付け(毎日)</li> <li>子どもをお風呂に入れる(毎日)</li> <li>子どもの朝ごはん(週3,4)</li> <li>子どもの口にご飯を運ぶ(休みの日)</li> <li>子どもを夕方散歩に連れて行く(毎日)</li> <li>子どもと遊ぶ(土日)</li> <li>土日や深夜に急に病院に行く機会が増える</li> <li>その他細かいこと色々</li> <li>里帰りの間から1年ほどネトゲにハマってしまう</li> </ul> <h3 id="その結果&考察"><a href="#%E3%81%9D%E3%81%AE%E7%B5%90%E6%9E%9C%EF%BC%86%E8%80%83%E5%AF%9F">その結果&考察</a></h3> <ul> <li>子どもはお父さん大好きになった。</li> <li>子どもの細かい成長をたくさん見ることができた。</li> <li>授乳等、母親にしかできないことがあるため、できることの限界を感じた。<br /> 妻は24時間休みがなくなるということを忘れてはいけない。<br /> 男だけ土日はゆっくり休みを取るとか子どもみたいなことは言わないこと。<br /> 自分でできることを探す。</li> <li>仕事は子どもや妻の都合に関係なくちゃんと時間やスケジュールを決めてやる。</li> <li>ネトゲやスマホゲーなど、物事にずっぽりハマってしまう経験は出産前に終わらせておいたほうがいい。妻に迷惑かけすぎ。</li> </ul> <h3 id="次男出産時"><a href="#%E6%AC%A1%E7%94%B7%E5%87%BA%E7%94%A3%E6%99%82">次男出産時</a></h3> <ul> <li>近くに親類もいないので長男はその期間前後の数カ月だけ保育園に入れた(月5万程)</li> <li>出産直前、長男がインフルエンザ、水疱瘡、それに伴う中耳炎で高熱(熱性けいれん持ち)<br /> 保育園はもちろん行けないので一番重要なところで無意味に。<br /> その1週間ほどは地獄で仕事も1日1時間出来たらいいくらいだった。</li> <li>妻は病院に許可をもらい長めに入院させてもらった。面会ゼロ。<br /> 水疱瘡がヤバイので荷物も病院の前に置いといて回収してもらう形。</li> </ul> <h3 id="次男が生まれてから変わったこと"><a href="#%E6%AC%A1%E7%94%B7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%8B%E3%82%89%E5%A4%89%E3%82%8F%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8">次男が生まれてから変わったこと</a></h3> <p>次男出産時にこの世の地獄を見たので、あれに近いことを日常的に妻に味合わせるのは危険という感情が芽生えた。</p> <p>・子どもの朝ごはん(毎日)。<br /> 元々2時くらいに寝て(ご飯担当でない時は)10時くらいに起きる生活だったが、<br /> 妻が授乳しながら長男にご飯をあげるのは地獄だと思うので毎日5〜7時くらいに起きて長男にご飯を上げることに。<br /> 体が勝手に11時くらいに寝るようになる。大体7時間睡眠という一番長生きできる時間に変わる。<br /> 今もずっと二人にご飯をあげて朝の準備をさせている。</p> <p>不思議なことに目覚めは良くなり、朝だらだら寝てることはなくなった。<br /> 妻が言うにはずっとうるさかったいびきもほとんどなくなったらしい。</p> <p>仕事&子育てで休みがないということが当たり前になった。苦もない。<br /> ろくでもない生活をしてろくでもない育ち方をして将来子ども達にハンデを背負わしてしまったり、<br /> 子ども達が他者にとんでもない迷惑をかけることになる可能性を考えたら、<br /> 今一生懸命子育てをすることはとてもやりがいのあることだし、自分の命を削ってでもやる価値のあること。</p> <h3 id="在宅エンジニアのメリット"><a href="#%E5%9C%A8%E5%AE%85%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88">在宅エンジニアのメリット</a></h3> <ul> <li>妻は子どもを家に置いて外へ行ける。(病院、美容院、ちょっとした買い物や休憩など)</li> <li>妻は子ども一人だけ連れて外へ行ける。(子どもの病院、発達検査、色々な手続き、幼稚園や習い事の集まり)</li> </ul> <p>↑夫が出勤して働いている核家族の妻は必ず子ども全員を連れて行かないと行けないので毎日死ぬほど大変。<br /> 腰が悪くてもおんぶだっこしなきゃいけない時もあるし、高熱が出てても休めない時だってある。</p> <ul> <li>幼稚園のバスの送り迎え位ならいけるので、妻に用事があっても幼稚園へ行かせられる。</li> </ul> <h3 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h3> <p>エンジニアはリモート作業も可能なため在宅で仕事がやりやすい。<br /> でも他業種はそうとは言えない。<br /> 親二人だけだと結構詰む事も多い。</p> <p>色々な会社でリモートワークが可能になっているニュースを見かけるが、どんどん増えて欲しいと切実に思う。<br /> また、困った時に頼れる行政上のサービス等ももっと必要。<br /> 親たちは本当に大変な思いをしながら生活している。</p> <h3 id="おまけ"><a href="#%E3%81%8A%E3%81%BE%E3%81%91">おまけ</a></h3> <p>どうでもいい話だが、ちょうどBOT API Trial Accountがあった時期だったので次男の写真を設定し、<br /> Androidのアプリ上の大きいボタンをタップすると「ごはんがほしい」「本読んでほしい」<br /> などといったメッセージが自分のLINEに飛んでくるというボットを作った。</p> <p>Arduinoと安く買えるようになったWifiモジュールを使って、現実のボタンからも送信できる回路とプログラムも作ったのだが、<br /> 最後の調整や妻のLINEに仕込もうと様子を伺ったりしていたところでTrial Accountが終了し無料では送信できなくなった。</p> <p>終わり。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/14285 2016-12-04T09:01:10+09:00 2018-10-26T09:59:23+09:00 https://crieit.net/posts/jQuery jQueryによるコンポーネント化考察 <h3 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h3> <p><a target="_blank" rel="nofollow noopener" href="http://qiita.com/advent-calendar/2016/javascript">JavaScript Advent Calendar 2016 - Qiita</a></p> <p>4日目</p> <p>注) SPAの話ではありません。</p> <h3 id="なぜjQueryを使うのか"><a href="#%E3%81%AA%E3%81%9CjQuery%E3%82%92%E4%BD%BF%E3%81%86%E3%81%AE%E3%81%8B">なぜjQueryを使うのか</a></h3> <p>今の時代、JavaScriptはAngular2やReactに代表されるコンポーネント指向の時代を迎えている。<br /> そんな中でなぜjQueryを使うのか。<br /> 下記の条件が組み合わさっている場合にはjQueryの方が使いやすい。</p> <h4 id="JavaScriptが必要な箇所が少ない"><a href="#JavaScript%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AA%E7%AE%87%E6%89%80%E3%81%8C%E5%B0%91%E3%81%AA%E3%81%84">JavaScriptが必要な箇所が少ない</a></h4> <p>SPAでJavaScriptをメインで使う場合はjQuery等今更使うことは無いと思うが、<br /> ほとんどサーバーでレンダリングされるhtmlで完結しているシステムに、<br /> 時々動きを加えたい、なんて時はいちいちNodeの環境を準備、周知し、<br /> ビルドしつつ開発する方が面倒。</p> <h4 id="開発陣が入れ替わる"><a href="#%E9%96%8B%E7%99%BA%E9%99%A3%E3%81%8C%E5%85%A5%E3%82%8C%E6%9B%BF%E3%82%8F%E3%82%8B">開発陣が入れ替わる</a></h4> <p>ずっと同じリーダーが開発の深い部分まで指揮していない場合もある。<br /> そういった場合はメインのエンジニアも入れ替わるし、<br /> その場その場で違う人がコードを書く。<br /> サーバー側のフレームワークは定まっていることが多いが、<br /> JavaScript側は特に指定されていなければjQueryが使われることは多いと思う。</p> <h4 id="サーバー側のフレームワークが優秀"><a href="#%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E5%81%B4%E3%81%AE%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%8C%E5%84%AA%E7%A7%80">サーバー側のフレームワークが優秀</a></h4> <p>なんだかんだで世の中のサーバー側のフレームワークは優秀で、うまく使っていると開発は非常に楽。<br /> それをわざわざAngular2やReactに置き換える場合、連携のためのコードを書いたり、<br /> サーバー側フレームワークと同等の機能をJavaScriptで書きなおしたりなどの作業が必要となり、<br /> 逆に面倒になる。</p> <p>なんとかやったとしても、今度はJavaScript側のサーバーサイドレンダリングが必要なんじゃないか、<br /> という考えに至り、じゃあNode側のサーバーの処理も作らないと、でもそこまでやるのはなあ…<br /> となっていき結局jQueryに落ち着く。</p> <h3 id="でもコンポーネント化したい"><a href="#%E3%81%A7%E3%82%82%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E5%8C%96%E3%81%97%E3%81%9F%E3%81%84">でもコンポーネント化したい</a></h3> <p>でもはやり最新の考え方を導入していきたい。ではそういった状況下において、jQueryでコンポーネント化し、Fluxの思想を取り入れるためにはどうすればいいのか、考察してみる。</p> <h3 id="プラグイン化"><a href="#%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E5%8C%96">プラグイン化</a></h3> <p>なるべく処理はプラグイン化し、至るところで再利用できるようにする。</p> <h3 id="データの流れを1方向にする"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E6%B5%81%E3%82%8C%E3%82%92%EF%BC%91%E6%96%B9%E5%90%91%E3%81%AB%E3%81%99%E3%82%8B">データの流れを1方向にする</a></h3> <p>JavaScriptの開発でDOMやデータが現状どうなっているか分からなくなり不具合の温床となる、<br /> ということがFluxの思想が生まれたベースとなった話だったと記憶している。</p> <p>jQueryを使用しているとそういうことが起こりやすいのだろうが、それは適当に開発しているからだ。<br /> きっちり考えてやればそうはなりにくくすることはできると思う。<br /> (もちろんjQueryだからきっちりしない選択もできるので、それをするエンジニアがプロジェクト内に出てきてしまう、<br /> というのが本質的な問題かもしれないが)</p> <p>とりあえず、諸々の処理ですぐにDOMを操作せず、<br /> 「処理→最後にrender」というのを一貫すればいい。</p> <p>例えば下記はjQueryプラグインのfullcalendarのソースの一部。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/fullcalendar/fullcalendar/blob/master/src/main.js"></a></p> <p>見ての通り中でCalendarクラスのインスタンスを作成し、最後にrenderしている。<br /> 初期化だけでなく基本的には全ての処理がこれになっている。</p> <p>つまり描画されるDOMは必ずインスタンスのプロパティ通りになる。<br /> これにより1方向の流れの基礎が出来上がる。</p> <h3 id="クラスを分ける"><a href="#%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E5%88%86%E3%81%91%E3%82%8B">クラスを分ける</a></h3> <p>プラグインが大きくなるなら描画部分ごとのパーツでクラスを分ける。<br /> パーツはなるべく親の値を参照するのみにし、<br /> 重要な値の変更が必要な場合はパーツ内ではなく大元のクラスの値変更+再描画を徹底すれば完全にFluxだ。</p> <p>htmlは変数に結合しまくりなのでやりにくいのは否定しないが、<br /> ちゃんと処理やパーツを分ければさほど見にくくなることもない。</p> <h3 id="自動起動"><a href="#%E8%87%AA%E5%8B%95%E8%B5%B7%E5%8B%95">自動起動</a></h3> <p>jQueryプラグインはscriptタグで読み込んで、ページ内で初期化メソッドを呼び出す、という流れが多いと思うが、<br /> BootstrapのJSのように勝手に動作してくれる方が楽だと思うし最近のコンポーネントぽいので、<br /> そのようにしてみる。</p> <p>下記の一番下にプラグインの雛形がある。</p> <p><a target="_blank" rel="nofollow noopener" href="http://qiita.com/k4zzk/items/11e5dbd53cb93edb8b4d">jquery プラグイン/作成</a></p> <p>このmethodsの上に初期化スクリプトを入れてしまう。</p> <pre><code class="javascript">$(function() { var targets = $('[data-tooltip]'); if (targets.length > 0) { targets.tooltip(); } }); </code></pre> <p>これでいちいち初期化を書かなくても全部自動起動される。<br /> クラス名はデザイナーがいつの間にか変えている場合もあるのでdata属性がいいと思う。</p> <h3 id="初期化設定"><a href="#%E5%88%9D%E6%9C%9F%E5%8C%96%E8%A8%AD%E5%AE%9A">初期化設定</a></h3> <p>これじゃあパーツ毎に設定ができないじゃないか、と思うかもしれないが設定もdata属性にしてしまえばいいだけ。<br /> プラグイン側で初期化時に値をそこから読めばいい。<br /> さっきのfullcalendarの例で言うとnew Calendarの中でやればいい。</p> <pre><code class="html"><div data-tooltip="foo" data-position="right">項目名</div> </code></pre> <h3 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h3> <p>長々と書いたが、これくらいなら普通に開発するのとほとんど労力は変わらないと思う。</p> <p>jQueryを使うデメリットは他にもある、という人もいると思うしやり方に好き嫌いはあると思うので、<br /> ひとまずより良い方法、というよりは考察とさせていただく。</p> <p>逆に言うと、まるまるAngular2やReactなどに置き換えるのではなく、<br /> こういった手法を簡単に安全に確実に実現できる良いjQueryのラッパーライブラリなどが登場するといいのではと思う。</p> だら@Crieit開発者