「ノンプログラマーのためのfreeeAPI活用講座」を開催しました!

こんにちは。freeeのPMM(プロダクトマーケティング)チームでAPIの活用支援をしております、谷と申します。

先月3/18から4/10、4/17の3日に渡って「ノンプログラマーのためのfreeeAPI活用講座」というイベントを開催し、講師をさせていただきました。

こちらについて、イベント内容のご報告と「ぜひ自分も取り組んでみたい!」という方のために、講座内容をレジュメやサンプルも含めて全て公開させていただきます。

「freeeを利用しているけども、まだAPIを活用できていない」という事業者様がいらっしゃいましたら、ぜひご参考ください。

イベントについて

弊社プロダクトの会計freee、人事労務freeeでは、API *1というものを公開しています。

support.freee.co.jp

APIを用いると、freee外のアプリケーションにてfreeeのデータを取得したり、新規登録したりすることができます(もちろん認証などの手順を踏まないで勝手に操作することはできません)

今回の「ノンプログラマーのためのfreeeAPI活用講座」では、今までプログラミングをほとんど行ったことのないfreeeを利用しているの経理の方々をお呼びし、Google Apps Script(通称GAS)を使用して”経営管理資料の作成自動化”を最終目標として、APIを活用してみるハンズオンイベントでした。

第一回(3/18開催)の様子

第一回では、そもそもAPIとは?という解説から、Google スプレッドシートを用いて、会計freeeから勘定科目の一覧の自動取得を行ってみるところまで行いました。

20名以上の参加者のみなさんがPCに向かっている写真
20名以上の経理担当者様が、APIを実際に叩いています

みなさん、最初は悩みながらでしたが、freeeからデータが取得でき初め「やった!」という声があちこちから聞こえてきました。

また、特に詳しく説明はしなかったのですが、皆さん勘定科目の取得ができれば、同じような取引先情報や、部門情報の取得なども同じ要領でスイスイと取得されていました。(すごい!!)

第二回(4/10開催)の様子

前回から少し日が空きましたが、第二回では試算表の取得を行いました。 試算表とは、貸借対照表や損益計算書のことで、会社の財産状況や収益情報が詰まった「資料作成において、最もよく使うデータ」の1つです。

講師の私も、参加者の皆様にいよいよ実践的なことをご案内することができるので、ワクワクしていました。

実際に損益計算書を取得して、自動で売上高販管費率を計算してくれるツールを作りました

Googleスプレッドシート上に構築された売上高販管費率を計算するツールのスクリーンショット。
売上高販管費率を計算するツール

今回行った分析資料作成は、非常に簡素なものです。 しかし、貸借対照表、損益計算書さえ取得できれば、あとはスプレッドシートの関数で自由に計算式を組んで分析資料を作ることができます。

今までCSVでデータダウンロードして貼り付け...を何度も繰り返していたことを考えれば、十分これだけでもAPIを使う価値がありますね。

第三回(4/17開催)の様子

最後となる第三回では、前回の試算表取得の応用編を学習しました。 例えば、試算表の取得期間を変更したり、取引先ごとの内訳金額を表示したりと言った内容です。

かなり盛りだくさんな内容で、正直詰め込みすぎかな、と心配していました。

しかしご参加いただいた皆様は第一回から顔つきも変わって、難しいところでも真剣な表情で前のめりで話を聞いていただき、無事皆さん最後まで完走されました。

本当にお疲れ様でした。

真剣な顔つきで講義を聞いている参加者のみなさんの写真
真剣に講義を受けていただいています、すごい集中力...

軽食とドリンクを片手に真剣に話をする参加者のみなさん
懇親会で会社の垣根を超えてAPIについて熱く語っています

全三回のコンテンツを作るにあたって大事にしたこと

プログラミングを学ぶ手順としては、教科書的には、基礎を学び、その後具体的なものを作っていく、という流れかと思います。

しかし、本イベントでは「変数宣言、配列、ループ処理...」などのお話は、第一回からコピぺで利用はしながらも、詳細な仕組みは最後の回で説明をしました。

これは、最初からプログラムの基礎的なことを始めてもイメージがしづらいこと。また、参加者の皆さんが親しみのある試算表などの取得をしてみて、「楽しい!嬉しい!」という体験をしてもらって、プログラミングに対する恐怖感を無くして欲しかったことが背景にあります。

ループを解説するイラスト。1階から10階に牛乳を届けるのを例に説明している
最終回にて、ずっと使っていたループ処理についてやっと説明

実際、第三回では、コードの詳細な解説をすることで「あ〜〜ここってそういう仕組みだったんだ!」と参加者の皆様嬉しそうにうなづいてくださっていたのが、とても印象に残っています。

参加者様の中には「数年前にプログラミングに取り組んだが挫折した」という方もいらっしゃいましたが、参加後のアンケートでは「プログラミングを楽しいと思えた」というお言葉をいただき大変嬉しかったです。

アンケートにてNPS(ネット・プロモーター・スコア)を測定していましたが、こちらも最終回は73と非常に高い満足を感じていただけたようです。

講座で使用したレジュメ

このような内容で進めた本講座ですが、第一回〜第三回のレジュメを下記で公開しています。自分もAPIを使ってみたい!という方は、ぜひチャレンジしてみてくださいね。

第一回レジュメ(APIの説明と勘定科目の取得アプリの作成)

第二回レジュメ(試算表の取得と加工:基礎編)

第三回レジュメ(試算表の取得と加工:応用編、GASサンプルあり)

GASはノンプログラマーの味方!!

freeeAPIを使ったアプリケーションを作るとなると、Oauth2.0認証*2というものが必要になります。 しかし、今回はGoogle Apps ScriptのOauth2.0認証ライブラリを活用することで、簡単に認証を済ませられるようにしています。

また、「毎朝自動で試算表を取得する」などのバッチ処理に関しても、Google Apps Scriptのトリガー機能を使用することで、マウス操作だけで完結することができます。

Google Apps Scriptのトリガー機能を設定する画面のスクリーンショット
Google Apps Scriptのトリガー機能....とても便利!

このように、1からコードを書かなくても、十分現場で使えるアプリケーションを作ることができるのは、本当にノンプログラマーにとってはありがたいな、と思います。

経理の方がプログラミングを学ぶ意義

経理の方の主な仕事は、会計帳簿の作成です。そして、会計帳簿は社内のあらゆる情報を吸い上げて、そして外部に報告する必要があります。

それゆえ、社内の業務フローの課題発見や、その改善の道筋について、全体感を持って考えることができるのは経理の方の特筆すべきスキルだと思います。

その既に持つスキルを十二分に活かすために、「簡単な問題なら解決策を自分で実現する力」を身につけてもらいたい、というのが本講座の目的でした。

これからもこのような活動を通して、経理の方が持つ「仕訳を正しく打つ力」だけでなく、「業務フローの課題解決力」がもっともっと発揮されるようにしていきたいなと思っています。

なお、5月には実際にAPIを活用されている企業様の事例等が聞けるセミナーも開催予定となっております。 ご興味のある方のご参加をお待ちしております。 go.freee.co.jp

誰でも技術を活用できる世界に

freeeではユーザーにとって本質的な価値があると自信を持って言えることをする、ということを「本質的(マジ)で価値ある」として価値基準に掲げ何よりも大事にしています。

そのためには、「プロダクトを作る、売る」だけではなく、今回のように世の中の経理の人がもっと輝けるように、という取り組みも進めています。

しかし、このようなことができる世界観は、APIの開発はもちろん、社内外の様々なエンジニアの方が作りあげたことで成り立っています。(ちなみにfreeeでは、2013年のプロダクトリリースと同じ年にAPIを公開しています)

もし、このような世界を一緒に作って、実現していきたい!という方は、現在エンジニアを募集をしていますので御応募お待ちしております。

jobs.freee.co.jp

*1:Application Programming Interface: 外部のアプリケーションとデータのやりとりをするためのインターフェース

*2:APIを通してfreeeのデータを操作するために、誰がその操作をしようとしているのかを認証する必要があり、そこでOAuth 2.0という規格を使用します

try! Swift 2019 - Tokyo にブース出展してきました

こんにちは。freee のモバイルチームでiOSエンジニアをしている大内と申します。

先日3/21 - 3/23に開催されたtry! Swift 2019 - Tokyo に弊社iOSエンジニア3名で参加してきました。今回はゴールドスポンサーとして協賛させていただき、ブース出展もさせていただきましたので、その参加レポートをご報告させていただきます。

ブースでの集合写真

なお、freee のモバイルチームは過去のtry! SwiftイベントやiOSDCなどにもブース出展しており、そちらのレポートもございますので合わせてご覧いただければ幸いです。

developers.freee.co.jp

developers.freee.co.jp

ブースの様子

ブースの様子。机の上にはfreeeキーキャップを装着したキーボードが置かれているブースの様子。確定申告ガイドやステッカーが置かれている

freee のユーザー様含めたくさんの方とお話できてとても楽しかったです!

お話させていただいた方々の中には業務外でアプリを作られている方も多く、ブースでお話させていただいた私も「ワシも個人でアプリを作って、あわよくば著名Youtuberに紹介されるなどして莫大な副収入を...」と個人開発の機運が高まりました。

また、ブースで配布させていただいた確定申告ガイドが非常に好評でした。ブース出展時はだいたい配布しているので、カンファレンス等で freee のブースを見かけたらお気軽に遊びに来てください!モバイル関連のカンファレンスでは freee のモバイルエンジニアがアプリの使い方を簡単にご紹介させていただく機会も設けさせていただいております。

ちなみにこのガイド、PDF版もあるのです。

印象的だったセッション

どのセッションも楽しく素晴らしい発表だったのですが、ここでは私が翌日から実践してみたいと思った発表について簡単に触れてみたいと思います。

テストケースでMemory Leakを発見する

tarunonさんからメモリーリークをチェックするassertライブラリXCTAssertNoLeakの発表がありました。テストのコストに関しては導入コストと維持コストがあると思うのですが、XCTAssertNoLeakはどちらのコストも低そうで、帰ったらすぐ試してみたいなと思っていました。

www.icloud.com

導入コストに関しては、いわゆるユニットテストだとそもそもテスト容易な設計になってない場合、「テストを書こうとするとリファクタリングが必要、ゆえにリグレッションが発生するかもしれないがそれを手当するテストがない...」といった感じで心が折れると思うのですが、メモリーリークテストに関しては対象のソースコードがある程度ダメでもちょっとしたボイラープレートを書けばパワープレイで導入できてしまいそうな印象です。

維持コストに関しては、リグレッションを検知した際に、テストかアプリケーションの実装を修正する必要があるわけですが、メモリーリークテストの場合は導入時のちょっとしたボイラープレートっぽいのものを書いたら、メンテフリーで長期稼働が期待できそうです。

とはいえ、こちらのライブラリ導入にはSwift5対応が必要なので、freee 本体ではなく、まずは自分でチマチマとメンテしているライブラリで試してみています。 (Xcode10.2でCarthageを使って導入してみたのですが、image not Foundのエラーが出てしまいうまく動きませんでした...😭)

突然のゾンビ自慢

Debug Memory Graphで循環参照が可視化された様子
六芒星

Debug Memory Graphでこのような芸術的な循環参照を見つけると嬉しくなりませんか。薄目で見ると六芒星のように見えてきて愛着が湧いてきます。 メモリーリークテストでゾンビ検知を自動化できるようになると、もう君ともお別れですね。 ちなみにこちらのゾンビは副作用を発生せず、静かに眠っているだけで安全なのです。。

モバイルのデザインシステムを構築する

本発表の発表者であるKristina FoxさんはIntuitのQuickBooksという財務マネージメントアプリのiOSエンジニアで、freee のエンジニアである私としてもこのセッションは今回のtry! Swiftで最も楽しみにしていたセッションの一つです。

speakerdeck.com

freee でも最近UIコンポーネントのライブラリを作って再利用可能なUIコンポーネントをライブラリにまとめたり、歴史的な経緯で混沌としているスタイルを統一するためのスタイルガイドの作成を行っているのですが、なんとなく手探りで進めていたので、発表を聞いて全体感が整理できてとても参考になりました。

また、スライドの中で言及されていたmaterial-components-iosは今回のスライドではじめて知ったのですが、ドキュメンテーションや実装、サンプルの作り方などとても参考にしていきたいと思います。

github.com

ポートレートモードを自作しよう

koooootakeさんから深度情報のない2次元画像をポートレイトモードに変換するとても面白い発表がありました。この発表に関しては個人的に未知の内容ばかりでとても驚きに満ちた発表で興奮しました!!

speakerdeck.com

github.com

スライドで「おお、すごい!」と感じた各ステップも全てソースコードで公開される太っ腹で、発表までの試行錯誤に関しても記事が公開されておりとても楽しい内容でした。Qiitaのこちらの記事も面白いので一読をおすすめします。 公開されたソースコードとスライド中で触れられているGrabCutなどのキーワードを手がかりに、自分も画像処理についてキャッチアップしていきたいなと気持ちが高まりました 😤

最後に宣伝

freee のモバイルチームは業務の一環でtry! SwiftやiOSDC、DroidKaigiなどのモバイル関連のカンファレンスに参加しておりますので、freee Tシャツを着た社員を見かけたら気軽にお声がけください。またエンジニアを募集しておりますので、興味があればぜひご応募ください。

jobs.freee.co.jp

さまざまな企業のノベルティの写真
お土産。いつも頂いてばかりですみません。

JAWS DAYS 2019 にサポーターとして参加してきました

こんにちは。freee の SRE チームの山本です。 先日開催された JAWS DAYS 2019 で、3 セッション 4 名の登壇とブースの出展をさせていただきました! また、弊社は過去に iOSDC2018 等でブースの出展をしております。

developers.freee.co.jp

セッション

Container/k8s で 2 名(2 セッション)、Supporter Session で 2 名(1 セッション)が登壇しました。 どのセッションも立ち見続出で、大変賑わっていました! AWS での Kubernetes 運用の関心の高さをひしひしと感じました。

ここからは各登壇者に一言ずついただきたいと思います。

EC2からKubernetesへの移行をセキュリティ/モニタリングから考える(杉浦英史/河村篤志)

こんにちは、CSIRT の専属エンジニアとして、色々首を突っ込んでいる杉浦英史と申します。 今回は、お客様の重要な情報を扱っている freee が、セキュリティとスタートアップとしての進化の二兎を追うために、Kubernetes 移行の時にどう考えて作り込んでいったのかを紹介しました。

f:id:yamamo429:20190306184748j:plain

Cyber Kill Chain の考え方で多層防御を考えると、EC2 instance のシステムから Kubernetes に移行する時に考慮しなければならない点が、整理できるのではないかと思っています。 freee の現時点の考えを積極的にオープンにしていますので、詳しくはスライドを参照していただけると嬉しいです。


こんにちは、SRE の河村です。

システムの健全性を保ち改善していくためにも監視は必要であり、その重要性は古今東西、システムの形態問わず普遍的なものです。しかし近年のトレンドであるマイクロサービス化においては、監視対象が多様化・増大化しており、効率的かつ正しい監視基盤の構築は一層重要度を高めています。全てのケースにマッチする最適解はなく、それぞれの要件にあった技術選定が大切なのは当然ですが、本セッションでは freee での事例として、Elastic Stack を活用した Kubernetes 向けの監視基盤について紹介しました。

f:id:yamamo429:20190306190944j:plain

詳しくはスライドを参照いただき、よろしければご意見・フィードバックいただけると幸いです。

なお、本発表は昨年末のAdvent Calendarの拡張版となっています。そちらも興味あれば是非御覧ください。 developers.freee.co.jp

Kubernetes を使ってエンジニア組織の生産性を上げよう(坂井学 @manabusakai

こんにちは、SRE チームのプレイングマネージャーをやっている坂井 (@manabusakai) です。

最初の紹介にもあったとおり、今年の JAWS DAYS には freee から 4 名が登壇しました。全員が Kubernetes をテーマにしていたので、自分はあえて技術的な話ではなくて、なぜ Kubernetes を導入しようとしているのか、Kubernetes に何を期待しているのか、といった話を生産性という切り口から紹介しました。

f:id:yamamo429:20190306191515j:plain

またセッションの後半では、freee が今まさに取り組んでいるマルチテナントクラスタからシングルテナントクラスタへの移行についてもご紹介しました。 Kubernetes を実際に 1 年ほど運用して見えてきた課題を踏まえて、EKS へ移行するのに合わせてシングルテナント化を進めています。 Kubernetes を採用している他社の事例を見ても前例がないので、移行してみた結果はまたどこかで発表したいと思います。

スライドも公開していますので、興味のある方はぜひご覧ください。

Kubernetes on AWS/EKSベストプラクティス(九岡佑介 @mumoshu

こんにちは!コンテナヒーローです。

これまで繰り返しいろいろな形で Kubernetes のベストプラクティスをお話してきました。今回は、昨年末満を持して Tokyo リージョンに EKS が上陸したことに起因するアップデートも含めて、2019 年 2 月のいま、AWS で Kubernetes を採用するのはどんな理由からか?採用するとしたら運用する際にどんなことに気をつければいいのか?といったことをお話させていただきました。

f:id:yamamo429:20190306192159j:plain

マイクロサービスアーキテクチャを採用している freee のエンジニアによって最適なプラットフォームとはなにか? freee の規模でそんな「理想のプラットフォーム」をデザインするとしたら、それはどんなものか?そんなことを考えながら、Kubernetes on AWS を運用する中で得た知見を全力であえ共しています。ぜひスライドを読んでみてください!

ブースの出展

個人事業主の方、副業なさっている方、勤務先でご利用いただいている方など、実際に使っていただいているユーザーさんとたくさんお会いすることができました。 私は先月freeeに join したばっかりなのですが、こんなに早くたくさんのユーザーさんとお会いすることができて感動しました!

f:id:yamamo429:20190306193846j:plain

ところで、みなさま確定申告のシーズンですが無事に完了しましたか? ということで、確定申告ガイドをお配りしたのですが、あれよあれよという間になくなってしまいました。 会計 freee の導入を検討くださっている方、まだなかなか使いこなせていない方の手助けにきっとなってくれていると思います! 疑問等あればぜひ会計 freee のサポートへ御連絡くださいね。

また、今回もノベルティの一つとして、freee のカンパニーロゴ入りのキートップを用意していたのですがこちらも大変注目を浴びていました! 私は自作キーボードの存在を知ってからまだ日が浅いのですが、エンジニアの心をくすぐるアイテムだとつくづく感じました。 今後もブース出展などでプレゼントすると思いますので、またの機会をぜひお楽しみに!

まとめ

f:id:yamamo429:20190306194539j:plain

私自身はJAWS DAYS への参加は初めてだったのですが、盛り上がりが想像以上で圧倒されてしまいました。 入社早々にたくさんの freee ユーザーの皆様にもお会いできた貴重な場でした。今後もよりユーザーさんにとって価値あるサービスをお届けできるよう精進していこうと思います。

最後に

freee では SRE エンジニアを募集しています。AWS や Kubernetes に興味のある方という方、私たちと一緒に働きませんか?みなさまの御応募お待ちしています。

jobs.freee.co.jp

2018年度も早稲田大学で「アルゴリズムとデータ構造」の特別講義を行いました

freee株式会社の浅羽です。普段はエンジニアリングマネージャーをしつつ、エンジニアの新卒採用も担当しております。昨年度に引き続き、今年度も早稲田大学様での特別講義を行う機会をいただきました。

壇上で講義をする筆者の写真

昨年のレポートについてはこちらをご覧ください

developers.freee.co.jp

講義内容を昨年度と比べて何を変えたか

さて、今年度の講義内容を考える上でどこをメインゴールにしようかと考え、最終的に昨年度と同様にアルゴリズムとデータ構造が実際にどう使われているかのイメージをもたせること主軸としました。

  • 難しすぎる内容を伝えることで変に挫折感を与えない
  • 簡単すぎてもよくないので学びのあるものにしたい

2017年度の講義資料がボリュームや難易度が程よいところだったので、最終的にはだいたい同じ内容で講義することにしました。資料はこちらになります

  • Webサービスの裏側の概要
    • リクエストに対してレスポンスを速く返したい
    • 何かしらのデータを読み書きすることが多い
    • ユーザが識別されることが多い(ログイン機能等)
  • RDBMSで使われているアルゴリズムのうちの一部
    • B+Tree
    • ソート (クイックソート、マージソート、Top-K selection)
    • テーブル結合(Nested Loop Join, Merge Join, Hash Join)
    • いかに速くデータを検索・操作するかの一例として紹介
  • KVS
    • セッション管理を例に紹介
    • ユーザの識別の一つの手法として紹介
  • キュー
    • 非同期処理を実現するためのコンポーネントとして紹介
    • レスポンスタイムを早くするために急いで処理しなくても良いものは後回しにするよ、という説明

speakerdeck.com

練習問題

こちらも昨年と同様にテーブル結合を3つのアルゴリズムを実装してもらい、入力データが大きくなった場合にどれくらい実行時間が変わってくるかを計測してもらいました。

Nested Loop Joinに関しては内部表のスキャンはフルスキャンのみ実装している前提なので、実際はB+Treeからのフェッチでそこまで重くならないこともあるよ、とは口頭で補足しつつ、データが数十万件くらいになると大きく実行時間が変わってくるのを体験してもらいました。

GitHubに解答例を置いておきました。

github.com

結果どうだったか?

講義が終わってから匿名でアンケートを取り、42名の学生の方から回答をいただきました。ご回答ありがとうございます!

本日の講義を、知人や友人に勧めたいと思われますか?

  • 「ぜひ勧めたい」を10、「全く勧めたくない」を1とした場合の10段階評価でご登録ください。

アンケート結果のグラフ

NPS(ネットプロモータースコア)という、顧客(今回の場合は学生さん)の推奨度の測定で用いられる手法で計算をすると、 (12 - 9) / 42 * 100 = 7.14となりました。この数字の絶対値の適正がどこかはわかりませんが、昨年も同様のアンケートを取ったところだいたい同じくらいの数字でした(経年で追いかけるのが大事だなと思いますので、次回も同じ方法でスコアを計算して改善したかどうかを計測したいと思っています)。

一方で1を一人でもつけさせてしまったのは、私の講義の改善の余地が十分にありそうなので、定性コメントにある内容をまずは改善していこうと思います。

本日の講義の難易度はいかがでしたか?

  • 「難しすぎた」を5、「簡単すぎた」を1、「丁度よかった」を3とした場合の5段階評価でご登録ください。

アンケート結果のグラフ

定性コメントの抜粋(私が一部コメントを編集)

以下のように良い点と改善点のフィードバックをいただきました。特に資料については字を詰め過ぎたりしている箇所があるので、次回また講義する機会がある際には修正しようと思っています。

  • 回答
    • 実際にどう使われるのかイメージができた
    • 演習問題が適切でよかった
    • 後ろの方からだと資料の字が小さかった
    • 演習問題の回答がほしい

まとめ

今回は2回目の講義になりましたが、内容や難易度に関しては程よいサイズだったのかなと思います。一方で改善のポイントは大いにありそうなので、プレゼン能力等を改善しつつ、学生の方にとって学びのある講義を引き続き提供できればと思っております。

宣伝

freeeでは現在2020年新卒エンジニアを積極採用中です。もし興味ある方はfreeeの新卒採用ページをぜひ御覧ください!

jobs.freee.co.jp