未熟学生エンジニアのブログ

TetsuFeの個人開発ブログ

TetsuFeはテツエフイー と読みます。FlutterやWeb周り全般、チーム開発について語るブログ

Djangoのfunction based viewとclass based viewの違い・メリット・デメリットを調べた

DjangoにはRailsなどと異なり、class based viewとfunction based viewという概念があります。MTVで言う所のView、MVCでいうところのControllerにあたる所のメソッドの定義の仕方に2通りメジャーなやり方があるという感じになっています。

調べてみた

この記事が詳しかったです

simpleisbetterthancomplex.com

以下、上の記事で挙げられていた中で自分が大事だなと思った違い(メリット)をあげます。もっと知りたい人は上の記事を参照してください。

class based viewの主なメリット

  • 継承が使える
    • コードが少なくなる
    • 一覧などのテンプレコードを使い回すこと(再利用)ができる
  • HTTPのメソッドがそのままクラスのメソッドになり 、わかりやすい

class based viewの主なデメリット

  • コードが読みづらい
  • デコレータが使いづらい
  • 継承やmixinが複雑になることがある

function based viewの主なメリット

  • 実装がシンプルで、読みやすい
  • 関数なので、デコレータが使いやすい

function based viewの主なデメリット

  • 再利用しづらい
  • GET, POSTなどを関数内で分岐させないといけない

思ったこと

function based viewの実装がシンプルで読みやすいというのがいまいちわからなかったです。シンプルなのは確かに基本的に一つの関数だけで完結するため(内部で別の関数を呼ぶことはもちろんあるが)ということかもしれないが、読みやすいというのはどうなんだろう。クラスを使わない分、メンバを気にする必要がなく、関数の中にある変数だけを気にすればいいため、コードを読むとき目を比較的上下させなくていいことや、必然的に継承ではなく委譲を使うことになるためだろうか。

ちなみに、フロントエンドを描きやすくするためにReactやVue、Angularなどを使ってバックエンドはAPIにするという形をとるのが主流な現在では、RESTに則ってGET, POST, PUT, DELETEを活用するため、それらをクラスのメソッドとして実装できるclass based viewが優勢なのかもしれません。

多分今後APIを作るときは、class based viewを使うと思います。

今後に活かしたい

DjangoはDRYの原則に乗っ取ったつくりになっていることを考えると、class based viewの方がいいのかもしれません。いままでなんとなくfunction based viewを使っていましたが、メリットを活かして書いていけるよう意識していこうと思います。

初めてのOSSへのプルリクエスト(ドキュメント編)

初めてのOSSへのプルリクエスト(ドキュメント編)

今回プルリクを送ったリポジトリ

github.com

Djangoで作られたECサイトのプロジェクトです。 このサイトで実際に運用されています。http://getsaleor.com

なぜこのリポジトリを選んだか

単純に自分が結構参考にしていたリポジトリだったからです。 現状バイト等でも綺麗なコードを読む機会があまりなかったので、大きめのOSSのコードリーディングをやってみたいと思ったのが始まりです。

なぜプルリクを送ろうと思ったか

どうせならコードリーディングだけじゃなくてコントリビューションもやりたいと思い、何気なくcontribution guideを読んでいたところ、typoに気づきました。 typoに気づいたら、これはコントリビューションチャンス!ということでプルリクを送ろうと決めました。

プルリクを送ると決めてから調べたこと

コントリビューションガイド

READMEから見つけた。以下のことについて注意して読んだ。

  • issueを立てるべきか
    • issue文のテンプレはあるか?
  • pull request文のテンプレはあるか?
  • テストについて

読んだ感じだと、どうやら特にやれることはなさそうだった。(今回はドキュメントのfixなので特にテストする必要もなく、CIに任せることにした)

マージされた似たようなプルリクを調べる

Githubの左上の検索ボックスから、「Fix typo」と検索

以下のような似たようなプルリクが見つかった。

https://github.com/mirumee/saleor/pull/3100

forkする

今回、実は先にリポジトリをクローンしてpushしてみたが、pushがリジェクトされてしまった。 ブランチ名を見ると、tetsufe:fix-type のようにコロンで区切られていた。 forkすると、こんな感じで表示されるらしかった。 そういうわけでforkしてからプルリクを送ることにした。

forkからpull requestの送り方は以下を参考にした。

qiita.com

ブランチ名

マージされた似たようなプルリクを調べる https://github.com/mirumee/saleor/pull/3100

  • タイトル
  • issueを立てるべきかどうか

修正する

ドキュメントを修正します。今回はPotsgreSQLと書かれていたのをPostgreSQLに直しました。これだけです。笑

一応、プロジェクト全体を検索し、ここしかその間違いがないことも確認しました。

コミットメッセージ

コミットメッセージは特殊である必要はないらしかったので適当に"Fix typo in docs about search" としました。英弱ですね。

プルリクの作成

pull requestをリンクから作成するとテンプレが自動生成される。しかもfork元に自動的にプルリクが作成される楽々仕様でした

$ git push
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 12 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 436 bytes | 436.00 KiB/s, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
remote: 
remote: Create a pull request for 'fix-typo' on GitHub by visiting:
remote:      https://github.com/TetsuFe/saleor/pull/new/fix-typo
remote: 
To github.com:TetsuFe/saleor.git
 * [new branch]          fix-typo -> fix-typo

この https://github.com/TetsuFe/saleor/pull/new/fix-typo リンクから行くと、勝手にプルリクのテンプレが入力された状態でフォームが出てきました。

f:id:swiftfe:20190210202158p:plain

プルリクのタイトル

コミットメッセージと同じでもOKらしかったので、そうしました。

プルリクの本文

I want to merge this change because... のプルリクのテンプレに従って、

I want to merge this change because potsgreSQL is wrong, postgreSQL is correct.

と書いた。意味はわかるはず。

完成!

github.com

プルリクを作成すると、CIが回り、そして終わります。この辺はさすが質の良いオープンソースプロジェクト感があります!

f:id:swiftfe:20190210202310p:plain

迷ったところ

pull requestのテンプレが見つからない(あとでわかったが、forkしてpushした時にコンソールに出てくるリンクからプルリクを作ろうとすると自動的にテンプレ文が入力された状態で始まる仕様らしかった。)

後日、マージされました!

github.com

メンテナの方からも感謝の言葉をいただき、割とテンション上がりました。笑

今度はコードでコントリビュートしたいですね!

皆さんも簡単なところからOSSへのプルリクエストを送ってみてはいかがでしょうか?

個人開発サービス「ホクマ」のコンセプトを再考する

「ホクマ」とは

2018年10月にリリースした、北大生限定のフリマサービスです。(でした)

http://swiftfe0.hatenablog.com/entry/2018/10/06/094817

  • 商品の出品
  • 購入
  • チャット
  • 商品・金銭の受け渡しはあって直接

元々のコンセプト

リリース当時は以下のコンセプトを念頭において作っていました。

  • 北大生限定のサービス
    • 他のフリマサービスよりも安心して利用できると考えている(同じ大学の学生との取引なので、相手の素性が分かっている)
    • 北大生限定という「北大愛」を持って利用してもらえる
  • フリマサービス
    • 大学生の要らなくなった教科書をより多くのお金に換えられる
      • 教科書などは使わなくなるが、古本屋などで売ると大したお金にならない
      • フリマサービスで売った方が高く売れる
    • お金のない学生は安く教科書などを買える

数ヶ月経った後の変化

運用を続ける上で考えの変化や気づきもありました。

  • 「会って渡す」ことによる出会いが何かを生むのではないか
    • 実際に開発者の自分も利用することで良い出会いがあった
    • せっかく北大生限定のサービスとしてユーザを集めたので、他にも「出会い」を中心としたローカルサービスとして発展させられないか(「ジモティー」の成功例もある)
      • 元々、フリマサービスだけでは売るもの・買うものがなくなった人は利用しなくなってしまうことが多い
        • 特に教科書を買うシーズン以外は使われないのではないか
        • 「出会い」は、買い物よりも希少性が高く、このサイトを使う価値となるのではないか
        • 「出会い」は定期的に欲しくなるものではないか
          • 新しい趣味の友達がほしい(趣味が変わる、増える度に欲しくなる)
          • 何度か段階的にチームに人数を増やしたい
          • 面白い人がいたら会いたくなる

今後の「ホクマ」のコンセプト

そんなことを考えた結果、

「ホクマ」を「北大生のためのフリマサービス」から、「北大生が欲しいものを手に入れられるサービス」へと発展させていこうと考えています。

今後は

  • フリマ
  • 仲間の募集

この二つを軸にした機能を展開し、「モノ」「お金」のやりとりだけでなく、「仲間」を見つける手助けをしていきたいと考えています。 北大生同士なので、「身近な出会い」も魅力として推していきたいです。

もちろん、僕自身も「ホクマ」を通じて色々なチャンスを掴んでいけたらと考えています。笑

フリマサイト 「ホクマ」の類似サービス、「ジモティー」の簡単な分析をしてみました

「ホクマ」に新機能を追加したい

北大生限定Webフリマアプリ「ホクマ」では、サイト上で「出品」と「購入」ができるというサービスを提供しています。

hufurima.com

最近、「出会い」要素をもうちょっと追加したいという考えになり、どのようにそれを落としこもうか考えて、Twitterでアンケートをとったりしていました。

WHY: なぜ「出会い」要素を追加したいのか

  • 個人的に、「出会い」を増やしたい(ほどほどに)
  • アンケートをした結果、「一緒に勉強する友達」を募集する機能などは需要があるらしい
  • シーズン通して使われる機能がほしい(「出会い」はシーズンに左右されにくい)
    • 現状、「出品」・「購入」の機能だけで、新しい学期からまだ遠いため、教科書などのやりとりも少ない
    • 新学期には取引の活発化が予測されるが、新学期シーズンが終わればせっかく登録してくれたユーザが離脱してしまうだろう

でもどうするのが正解だろうか?

「出会い」(マッチング)を実現するために、どんな機能を作ればいいのか?はわからなかった。

  • 「一緒に勉強する友達」のように絞ってしまう方が良いのか?
  • 「友達募集」のように広く使いやすい方が良いのか?

そこで、類似サービスである「ジモティー」を見て参考にすることにした。

ジモティーの場合、同じCtoCのサイトではあるけど、商品の売り買いだけじゃなくて、もっと他のこともできる。

例えば、「譲って・助けて」っていうカテゴリーがあって、「英会話を教えてください」みたいな募集から、「旅行に行くからおすすめの場所教えて」とかまである https://jmty.jp/hokkaido/coop-les

ジモティーでは、「募集」に以下の大カテゴリがある。

  • 売ります・あげます
  • 中古車
  • 里親募集
  • メンバー募集
  • 譲って・助けて
  • アルバイト
  • 正社員
  • 教室・スクール
  • 不動産
  • イベント
  • 地元のお店

「出会い」っていうコンセプトで行くと、

  • イベント
  • メンバー募集
  • 譲って・助けて

あたりが該当する

イベントに関しては、ジモティーでもfacebookと同時投稿している人が多いようだし、あまり需要はないかもしれない https://jmty.jp/hokkaido/eve-fes/article-bo0gt

「メンバー募集」はどうなんだろう。

ジモティーでは、 「メンバー募集」の中に「友達」っていうサブカテゴリがあって、 「ラーメン友達募集」 https://jmty.jp/shizuoka/com-fri/article-bo8kw とか 今からのみませんか! https://jmty.jp/tokyo/com-fri/article-bo8ki とかの投稿がある

「友達」以外にも、「バンド」とか「スポーツ」とかがある 社会人のサークル設立とか、そういう需要があるらしい。 https://jmty.jp/hokkaido/com-spo/article-bl956

「ホクマ」を見てくれる人がどれくらいいるかはわからんけど、こういった「サークルメンバー募集」とかを掲示しとくのはありなんかも。(まあツイッターとかホームページとかあるから微妙なところではある)

結論

ホクマでやるなら、以下のあたりで大雑把にやる方がいいように思った。

  • 「oo友達募集」
  • 「教えて・知りたい」
  • 「イベント」
  • 「買わせて・譲って」

理由

  • ジモティー」がこんなアバウトなカテゴリわけでも一定のユーザ数(北海道でもだいたいどのサブカテゴリでも1日1募集くらいはあった)を保っていること
  • 「ホクマ」は実験的サービスなので、まずは自由な使い方をしてもらった方が思わぬ使い方に気づかせてくれるかもしれない
  • 上記のカテゴリなら北大生にも需要がありそう

その他、気づいたこと

それと、他に気づいたジモティーの面白いところとしては、いろんなカテゴリで投稿(投稿というのは上の https://jmty.jp/hokkaido/com-spo/article-bl956 のようなもの)ができるけど、そのフォーマットは同じということ。

つまり、「友達募集」カテゴリのフォーマットも、「売ります」のフォーマットも全く同じだということ。 これがUI/UX的にいいのかはわからないけど、ある程度利用者がいるということを見ると、色んなカテゴリがあってもその投稿フォーマットは同じで問題ない、あるいはその方がむしろ見やすい/使いやすい可能性があるということ

「フレーズ英単語1800 センター対策編」サポートについて

お問い合わせ先

下記メールアドレスからお問い合わせください。本アプリはユーザーの皆様からの要望に答える形で新機能や単語の内容など、これからも改善を行なっていく予定です。ぜひお気軽にお問い合わせください。ご要望があれば、LINE@などのサービスも開始する予定です。

phraseeitango1800あっとまーくgmail.com

(「あっとまーく」を@に変えてください。迷惑メール対策のため、一部表記を変更しています。)

ピクシブの冬インターンシップ(2018)に参加しました

はじめに

ピクシブの冬インターンシップ(2018)に参加してきました。 今回は久しぶりにまとまった記事を目指します。

ピクシブとは?

有名なイラスト・漫画などを自由に投稿・閲覧できる「pixiv」や、同人誌などの創作物をネット販売できる「BOOTH」などを運営しているIT企業です。これ以上の説明はいらないと思います。

「創作活動がもっと楽しくなる場所を創る」を理念として掲げており、「pixiv」以外にも実は多くのサービスを展開しています。

「創作活動がもっと楽しくなる場所を創る」はすごく僕の作りたいサービス像とも近く、ずっと気になっていました。

インターンの概要

  • 2018年 12/15,16の2days
  • 参加者は6人で、一人一人が「君だけのpixivを開発る(つくる)」ハッカソン
  • 参加者一人につき原則一人メンターさんがつく
  • Web(フロントエンド), iOS, Androidのどれかでアプリを作る(どのメンターさんがつくかによって実質決まる)
    • 僕はiOSのメンター@kameikeさんにあたったのでiOSになりました

このインターンをどうやって知った?

11月中旬のサポーターズの1on1面談イベントでピクシブの方と面談して、そこでインターンのことを知りました。

サポーターズの面談イベントは1日で8社くらいの企業と約30分ずつ話せて、いろんな出会いがあったのでオススメです。(https://zine.qiita.com/event-report/find-my-best-internship/

なぜ受けた?

元々僕は「pixiv」や「BOOTH」、「pixivFANBOX」などの、創作活動を共有したりサポートしたりするサービスにとても興味があったので、(BOOTHでは実際に技術書を買ったこともあります)インターンは一年ほど前から行きたいと思っていました。

しかし、実はこれまで直近の春、夏と二回受けていて両方とも落ちていたので、ピクシブはやはり自分のレベルでは縁遠い会社なんだろうと諦めていました。

そんな僕ですがインターンに応募しようと思ったのは、面談イベントで「ぜひ受けてください」と言っていただいたので嬉しくなって、いけるんじゃないかと思ったから・・だけではなく、自分のサービス「ホクマ」についてCTOの@edvacfさんに褒めてもらったりアドバイスをもらったりしたのも大きかったです。

なぜインターンに合格できた?(想像含む)

正直100人以上の応募があって、その中の6人に選んでいただけるとは思いませんでした。面接時に過去に開発したiOSのひどいコードを見られてしまった上に、最近はiOSのコードを書いていないと言っていたのにiOSコースに受かりました。

選んでいただけた理由を聞いてみたところ、「以前の応募からの(技術的?)成長を感じたから」というところが大きかったみたいです。

また、以下は想像ですが、おそらく技術的なところ以外での評価配分も大きいのではないかと思ったりしました。(割とgithub上で継続的に開発している、サービスを運営しているなど)

インターンでは何をした?

ここからはインターン内容に入ります

自己紹介

インターン生とメンターさん、人事の方や運営メンバーの方の自己紹介がありました。

みなさんマイクを使っていたのですが、緊張して自分だけマイクを使ってなかったと思います。(どっちか覚えてないレベルで緊張してました。笑)

作るものを決める

「pixivの自分/他ユーザ投稿をカレンダー形式で表示するアプリ」を作ることになりました。

ポイントは、

  • カレンダーでイラストを投稿した日がわかる
  • 自分/他の人がイラストをどれくらいの頻度で上げているかわかりやすい
    • 自分の努力が可視化でき、続けるやりがいになる
    • 他の人がどれくらい頑張っているかわかり、目標になる

今回のサービスは、今まで自分でも作りたいと思っていた 「努力をサポートする」系のアプリ でした。やっぱりこういうアプリはいいですね。ピクシブの理念(?)でもある「創作活動がもっと楽しくなる場所を創る」ことができたんじゃないかと思います。(それに合わせてごますりで作ったわけではないのですが)

メンターの@kameikeさんは技術力だけでなく、サービス開発についても詳しかったので、色々と教えていただきました。おそらくピクシブのエンジニアの方はみんなサービス開発に詳しいと思います。サービスについても研究熱心な方ばかりでした。

具体的には以下のような点が注意すべき点として挙がりました。基本のことだと思うので、忘れないようにしたいです。

  • 明確にターゲットを決める
  • どういったユースケースがあるか具体的に考える
  • 仮説に説得力をつける
    • 他アプリでの事例の調査
    • 自分・周りの人の実体験を使う
    • プロトタイプでのユーザヒアリング
  • 登録画面は重要。何ができるか想像できるように
    • 期待を持たせ過ぎても離脱しやすい
  • 優先順位を決めて、最低限の実装を(ハッカソン中に)確実に完成させる

ペアプロ形式で開発

f:id:swiftfe:20181225172820j:plain

メンターの@kameikeさんとのペアプロで交代しながらコードを書いていこうということになりました。 僕が最近iOS書いてないんですと言ったこともあり、メンターさんが結構最初から見本という名のほぼ完成形を作ってくれるというハッカソンのイメージとは違う流れになりました。(これがもし学生同士のペアプロなら、僕何も書くことなかったかも。笑) プロのコードに触れて、勉強になってすごく良かったです。

delegateパターンやDI、RxSwift、その他swiftらしいコードの書き方(protocolやenumなどの型とIDEを使った書き方)に戸惑い圧倒されて最初は何もできず、正直自分の無能さで縮こまっていました・・

ここで学んだ技術については別記事でまとめます

だんだん圧倒されるだけでなく、すごい勉強のチャンスだと思えてきたのと、コードがすごく綺麗で変更やすい設計になっていて、久しぶりにプログラムを読んで触って感動しました。 雲の上のレベルだと思っていたプログラムがなんとなく理解できてきたのがすごく嬉しかった・・本当に来れて良かったと思いました。 こういうきっかけは本当大事にしたいです。

プレゼン

完成したアプリについて、デモ動画も交えた10分間のプレゼンをしました。

懇親会で他のインターン生に「すごいプレゼンの時落ち着いてたよね」と言われましたが、自分では結構詰まったりしていたと思っていたので意外でした。「でもすごい震えてました」と僕がいうと、社員の方の中にも「汗をかく」とか「手が震える」という方がいて、緊張が体に出るのは皆さんもなかなか治らないんだなと思ってちょっと安心したりしました。

それと、プレゼンのいい感じのテンプレ構成を勉強(作成)したいなと思いました。みなさんプレゼン資料うまかった。

ご飯

f:id:swiftfe:20181225172824j:plain

1日目の夜は沖縄料理のお店に行きました。ゴーヤーチャンプルーおいしかったです。

2日目の夜はお寿司とピザを食べました。 一人お寿司が食べられない子がいたんですが、その時にメンターの@makunさんが「どうせ足りないから頼もう」と言っていたのが地味に印象に残ってます。こんなこと言える先輩になりたい。(ピザを追加で注文していただきました)

CTOの@edvacfさんを@edvacfさんと呼ぶのはちょっと緊張しました。CTOの人はどんな仕事をしているのかというなかなか聞けない話も聞けました。 謎の三重県津市トークがあったり、同じインターン生@chigeくんが作ったプログラミング言語かるたをやったり楽しい懇親会でした。

その他

オタクが許されるというかむしろ歓迎される文化を感じました(社内にタペストリーが飾ってあったり)。メンターさんの中にはイラストが好きな方だけでなく、イラストを描いている方もいました。

僕はオタクですが人前でオタクをあまり出せないので、オタクトークに反応できなくてそれがちょっと申し訳なかったです。笑

インターンで何を得た?

いろんなことを教わり、経験でき、全体的に得るものが大きいインターンでした。2日間という短い期間でかなりクオリティの高いインターンでした!

まとめると以下のような感じです

  • ピクシブについて知ることができた(社員さんや全体的な雰囲気)
  • iOS(Swift)プログラミングの技術・思考
  • サービス開発で気をつけるべきこと

感謝

運営の人事・メンターの方々本当にご苦労様でした。 色々ご迷惑をおかけすることもありましたが、2日間本当にありがとうございました!

まとめ

  • 2daysですがすごく満足度が高い
    • メンターさんとのペアプロで圧倒的技術力向上
    • ピクシプの雰囲気も十分知れた(気がする)
  • 楽しかった
    • 雰囲気がすごく良く、オタクにも優しい
  • こんなところで働きたい