Google Driveにおけるファイルステータスの調べ方あれこれ

 

Google Drive便利ですね。

今回はGSuite(あ、先日Google Workspaceに名前変わりました)の管理コンソールからファイルサイズの利用状況を確認する方法です。

管理コンソールからレポート > アプリレポート > アカウント で以下の画面が出てきます。


このうちの「赤:ドライブの使用容量」「緑:共有ドライブ ストレージの使用量」「青:合計使用容量」の見方について説明します。(ヘルプにはっきりしたことが書いてなくて調べる必要がありました)

ドライブの使用容量(赤): ドメイン内の各ユーザーが「マイドライブ」で使用している合計容量

共有ドライブストレージの使用量(緑):ドメイン内の「共有ドライブ」で使用している合計容量

合計使用容量(青): アカウント単位で全体で消費されている合計容量 ( Gmail + Google フォト + マイドライブの全体消費容量 )
(共有ドライブの消費容量は含まれません)

プランによっては1ユーザあたり2TBの容量制限がありますので、上記をにらみながら運用を考えていく必要があります。

また一つ重要なのことが、共有ドライブにはファイル容量の他に「フォルダとファイル数」の上限値があることです。

上限値は400,000なのでこちらも共有ドライブを作る際の設計の考慮に入れる必要があります。

もちろん個別のファイルサイズに依存しますが、1〜2TBぐらいを目安にするとよいのではと考えます。

上限値への達成状況は以下のメニューから確認します。

アプリ >G Suite > ドライブとドキュメント の設定 > 共有ドライブを管理する

なお、共有ドライブの「ファイル数」を知るにはValutを利用します。

1. [ 案件 ] をクリックしタイトル(例: 「ファイル数カウント」)をつける

2.[ 検索 ] をクリックして上から、[ ドライブ ]、[ すべてのデータ ]、[ 共有ドライブ ]を選択

3.[共有ドライブを探す] をクリック後、当該共有ドライブを検索して選択

4.[ 検索 ] をクリック、[結果をエクスポート]をクリックし[エクスポートを開始]

 

これVaultじゃなくて管理コンソールで確認できるようにしてくれるといいですね!

Windows Server 2012が起動しなくなりGoogle Drive Streamへ移行しはじめた

Windows Serverで予期せぬ電源オフが発生し、Hyper-VのゲストOSが起動しなくなってしまった。
このOSはファイルサーバとして運用しており業務影響が大きいのでかなり焦る...
管理者が一番見たくないブルーな画面
エラー内容
Revcovery
The boot configuration data for your PC is missing or contains errors.
File: \EFI\Microsoft\Boot\BCD
Error Code: 0x000014c
どうやらブートファイルが壊れてしまったようだ。やれやれ。
エラーコードでググって見ると、起動ディスクから起動して修復コマンドを叩くといいらしい。
Hyper-Vのコンソールを開いて、OSの起動順をホストOS領域に保存してあったisoイメージが一番上になるように一時的に設定。
再起動時に復元メニューからコマンドメニューを起動して下記を実行。
 bootrec /fixboot
 bootrec /rebuildbcd
再度起動順を元に戻してから再起動すると無事に稼働できた。ふ〜。
今回は無事に戻ったのでよかったが、一旦ファイルサーバが壊れると、たとえバックアップを取っていたとしてもリストアまで数日かかるため、事業への影響はとても大きそう。これを機会に抜本的解決に乗り出すことに。

対策

クラウドストレージのGoogle Driveにファイル単位で日次バックアップを行い、異常発生時にはいつでもそちらに切り替えられるようにした。
(バックアップイメージではなくファイル単位でバックアップすることでリストア作業を不要に)
Google Driveは、よくあるWebからのアクセスではなく、Google Drive Stream を利用して、これまでのSMB共有時と同じような使い勝手を実現。
Google Drive Stream は以前から目をつけて評価をしていたが、このような使い方(ユーザーに対してWeb からのファイルアクセスをさせずにあたかも共有ドライブのようにファイルを扱わせる)ができる唯一のクラウドストレージサービスとなっている。とてもよくできている。
ユーザーのITリテラシーが高くない企業ではBoxやDropbox、One drive などのクラウドストレージは多機能すぎて、運用コストが上がってしまうため、このように機能限定の使い方をさせたい場合にGoogle Drive Streamはおすすめ。
Webからのアクセスを制限するめにはID/Passを管理者が一元的に管理する必要があるが、このことによりセキュリティも担保できるのも良いところ。(最初のセットアップはログインが必要なため管理者が行う必要あり)。コストは1IDが月1400円程度。
なお、ファイル単位のバックアップは無料のミラーリングツール(Backup)で実現。このツールはホスト側のファイルとをミラーしてくれバックアップ側のディスクが肥大化せず、初回の全コピーの後は増減分のみを反映するため数テラバイトのファイルを日次で同期することも十分可能。(作者はあのFFFTPを作った方でした!感謝。)
6−7TBで初期バックアップが2週間ぐらい、移行は日時で差分同期ができている。
異常時に備えてここまで対策しておけば、ゆくゆくはオンプレサーバーを終了してクラウドに移行する場合も業務への影響を最低限に抑えた移行ができそうだ。

kintone で日付から曜日を算出して表示する

なぜかkintoneには曜日のフィールドがないですね。ということで日付フィールドから曜日を算出して表示するコードを書いたのでサンプルとしてアップします。

kintone は素晴らしいプロダクトですが、このような「当然あっていいはずの機能」がいまだにサードベンダーの有償プラグインを買わないとできないことが多いのが疑問です。有償プラグインは便利ですがそのための決裁を取るハードルは企業担当者にとって大きいはずです。だからといってカスタマイズを入れるのも責任を考えると怖くてできません。当たり前の機能のために不毛な社内調整をするか、このような当たり前の機能でも我慢し、結果としてそのしわ寄せはエンドユーザーの不便につながるわけです。

業界も、現状は一人勝ちのサイボウズエコシステム内でビジネスをしていればいいのかもしれませんが、こうしたユーザー軽視とも取れる政策は後々必ず自らを苦境に陥れます。

このような当たり前の機能は、例えサードベンダーが先に開発していたとしてもどんどん本体に組み込むことです。この結果、サードベンダーは別の新たな価値を生み出すことに注力するようになり、それにより市場は広がり、、、という好循環が生まれます。

かつてのiOSは最初コピペもできないひどいものでしたが、サードベンダーが開発したお便利アプリを次々と標準に取り込んで今のOSが出来上がりました。当時は私もお便利iOSアプリを開発して小銭を稼いでいた身でしたが、そんなAppleに「なんて無慈悲な!」という感想をもった一人です。ただそんなことに忖度していてはいいプロダクトはできないんですね。サイボウズさんにはぜひこのあたりを施策を切り替えていただき世界に打って出るプロダクトになってほしいですね。

Twitter botをkintoneとAWSを贅沢に駆使して作ってみた

コロナが荒ぶれてトライアスロンの練習もままならないため「第四種目」のプログラミングに勤しむことに。今回は自分が住んでいる街の情報を収集する高機能なTwitter botを開発。

概要

  • 街名を含むTweetを定期的に自動収集してデータをkintoneへ蓄積
  • kintone上の蓄積データを定期的に検索して有用なTweetをRT or Fav
    • 有用かどうかはあらかじめ設定したキーワードで判断
    • あらかじめ設定した「NGワード」を含んだTweetは無視してノイズを排除する
  • followerを管理
    • followerへはfavをしない(favされすぎるとうざいから)
  • 街名を含んだニュースとYoutube動画を定期的にTweet

こんなことをやるために用意した構成がこちら。

なんか無駄に豪華w

この構成の背景としては、TwitterやYoutubeのAPI使用制限がそこそこきついため、都度都度Twitter/youtubeからデータを取りに行くのではなく、定期的にkintoneにアーカイブする形でTwitterへの無駄なAPIアクセスを減らす必要があったことに起因する。

またDBではなくkintoneでデータを一元管理することで、このTwitter botをメンテする人はプログラミングやDBに詳しくない人でも十分に可能となる構成になった。加えてTweetの分析などでもkintoneなら単なるTwitter botにとどまらずちょっとしたマーケティングツールとしても活用できそう。(街名以外の用途で使ってみたい方いたらご連絡ください)

管理コンソールもプログラミングレスで

こんなことがPythonをちょちょいと書いてkintoneとTwitterのAPIを叩き、AWSの力を借りると簡単にそして超安価に実現できる時代になっていることを改めて感じている。(やはり AMZNとサイボウズ株は買いで間違いない!?)

今回習得した内容

  • Github一通りの運用(リポジトリ、コミット、プルプッシュ、ブランチ、サブモジュール)
    • サルでもわかるGithubで習得
  • VSCodeからLambdaのデバッグおよびデプロイ
  • AWS CloudFormation / Docker
  • Yamlの記法なんとなく

さるでもわかるGit入門がほんとに分かりやすかった話

Subversion脳の自分にとって分散リポジトリが前提のGitは何度かチャレンジしたけど中々腹に落ちてきませんでした。

ただヌーラボさんの「さるでもわかるGit入門」という本を読んでやっと基本が身につけることができた。

この本はオススメです。

読み方

1度目はパラパラと読み進めて、2度目は実際に手を動かしながらやってみます。

またパソコンが2台ある場合は、Githubのアカウントを二種類つくれば擬似的に共同開発が体験できます。(自分にプルリク送るとかに虚しさを感じてはいけない)

あと、初心者の人はGitとGithubは似て非なるものだという認識があるといいかもしれません。

Gitは分散リポジトリを特徴に持つファイルバージョン管理のオープンソースです。オープンソースなので、自分でサーバーを立ててGitをインストールすることもできます。この場合、サーバであるGitサーバとクライアントのパソコンの双方にそれぞれサーバー用とクライアント用のGitをインストールすることになります。

対してGithubはGitを使ったクラウドサービスです。Gitのサーバー部分だけをクラウドサーバ化して提供されています。

ですのでGitのクライアントさえインストールできれば、Githubのサーバーとやりとりできる環境ができます。

ちなみに、Gitのクライアントは前述の通りオープンソースですが、ここで提供されるのはコマンドでサーバーとやりとりするモジュールです。GUIを使いたい場合は各社から出ているツールが使えます。この辺りの関係性も最初に頭にいれておくといいと思います。(「さるわか」ではAtlassianのSourcetreeというツールを使って解説しています)

201910 投資方針 極私的メモ

リセッションの懸念が叫ばれて久しいですがなかなか堅調な金融界隈です。

日本株は配当重視、米国株はハイテクをベースに配当銘柄を拾う方針をとっていますが今一度自分宛の手紙としてメモを残しておきます。

  • 方針1 国内と米国株の割合は2:8とする
  • 方針2 日本株は大型かつ高配当銘柄をウォッチしつつ下落時(RSI20%前後)に機動的に買い増しを行う
  • 方針3 米国株はハイテクETFで50%を構成する
  • 方針4 米国株の残り50%は個別の高配当株で下落時に機動的に買い増しを行う
  • 方針5 定期購入は値幅が少ないETFで構成し、下落局面で機動的に個別銘柄に振り替え投入できる体制とする

方針2の「高配当株」の条件

  • 配当利回り4%以上(2019/10現在)
  • 連続配当中
  • 10年来減配していない
  • 営業CFマージン10%以上
  • 具体的には下記銘柄

8316 三井住友FG
8058 三菱商事
4188 三菱ケミカル
8591 オリックス
8031 三井物産
8766 東京海上
9437 NTTD
2914 JT
5411 JFE

方針3 米国株はハイテクETFで50%を構成する

VGT:QQQ:TQQQ 3:2:1

VGTはソフトウェア、ハードウェア、半導体の3つのセクターで構成されているハイテク銘柄です。アップル、マイクロソフト、ビザ、インテル、シスコ、マスターカード、オラクル、IBMなどで構成されますが、アマゾン、グーグル、フェイスブックは含まれません。

QQQはナスダックの時価総額上位100社で構成されるETFで米国におけるIT銘柄はほぼ含まれます。(QQQの70%がIT企業)

マイクロソフト  11.4(%)
アップル     10.4
アマゾン      9.6
フェイスブック   4.8
アルファベット   4.5
インテル      2.5
シスコ       2.5

TQQQはQQQの三倍レバレッジ版。ギャンブル欲求を満たすために入れておくw

残り50%は個別の高配当株で下落時に機動的に買い増しを行う

BTI
JNJ
PM
MO
T
XOM
MMM
BA

方針5 定期購入分は値幅が少ないもので構成し、下落局面で機動的に個別銘柄に振り替え投入できる体制とする

口座1

eMAXIS Slim米国株式(S&P500)

eMAXIS Slim新興国株式インデックス

上記を3:1で毎月購入

口座2

eMAXIS Slim米国株式(S&P500)

eMAXIS Slim新興国株式インデックス

上記を2:1で毎月購入


2019.12.10追記

市場が強気すぎる気がして方針3〜5は撤回し、一度利確して現金および債権ETFへ退避しました。

高配当株はいつでも買えるようにしておいて、年明けにゆっくり投資開始しましょ。

 

社会人のセブ島英語留学(身も蓋もない感想)

はじめに

10日間ほど休暇が取れたのでセブ島の英語留学に行ってきました。私のスペックとしては

  • TOEIC800前後
  • 文法と基本語彙はほぼ押さえている
  • 会話に必要な瞬発力がほとんどない(のでこれを鍛えたい)

というものです。

当初はGabaあたりの駅前留学も考えましたが、見積りを取ってみると想像以上に高額で「これなら旅行がてら海外で勉強したほうが得るものが多そうだ」と考えたわけです。一週間程度ではもちろん劇的な英語力向上は期待できませんが、スピーキングの口慣らしをするぐらいの目的であればセブ島行きはありかなと思いチケットを予約しました。

それにしても日本の英会話学校における家賃や広告費用の経費は相当なものですね。一等地の教室、CM、電車やネットなどでの大量の広告費などなど、本来お金をかけるべき講師の人件費の経費に占める割合なんてせいぜい20%程度ではないでしょうか。英語学校はコンプレックス産業の一面があるのでこのような勢力がどうしても強くなってしまいますが、新宿の NCCのような真の英語教育を目指す機関がもっと出てきてくれることを願います。

学校選び

少しググればわかりますが、セブ島には星の数ほど英語学校があり、多くの学校は寮も併設して半年や一年単位の留学生を受け入れているようです。セブ島の英語学校は、元々韓国人が格安な英語学習環境を求めて公用語が英語であるフィリピンに目をつけたのが始まりです。

英語話者が豊富にいて、教師の賃金が安く、近場にあるということもあり、瞬く間に日本を含めたアジア地域の英語学習需要を掴んだわけですね。ただ、ここまで沢山の学校が出来てくると昨今では供給過剰になっているらしく、英語と合わせてプログラミングも!だとか筋トレやダイエットなど英語以外の何かを組み合わせた留学コースも誕生しつつあり、もはやなんでもありの様相も醸しつつあります。

さて私の場合は、1週間程度の短期滞在、寮ではなくホテルからの通学希望、仕事の都合で探し始めたのが一週間前、ということもあり、なかなか希望に沿う学校が見つからなく苦労しました。

これまたネットに沢山出てくる留学エージェントにも声をかけましたが、彼らはコミッションビジネスであり、学校の間に立つとどうしても情報が歪んでしまうので、直接学校にアプローチして交渉したほうが効率的でした。最近はメールの他にLINEでのやり取りもできる学校もあるので気軽に内容を調整することができます。

ちなみに、あとで聞くところによるとLINEのやり取りの主は現地のインターンシップで採用された日本の学生さんでした。彼らは寮とランチ代が無償になる代わりに、現地の日本人生徒のサポートや留学検討者からの問い合わせ対応を日々しているとのことです。ただし無給で現金収入がないので日々の生活はかなり切り詰めているようでした。英語の授業も空いた時間でなら受けられるようですが、なかなか勉強に集中できる環境ではなさそうです。日々の会話相手が現地の日本人生徒と日本からの問い合わせなが中心なので、もしかしたら英語より日本語の使用シーンが多いかもしれませんね。何となく搾取感を感じてしまった私でした。

色々と検討した結果、オールマンツーマンで1日6時間の授業の学校を予約できました。費用は1日1万円ほどです。内容はスピーキングを4時間にして残りの2時間をライティングにあてました。発音やボボキャブラリーの授業は短期での効果が見込めないため全てカットしました。

授業内容

さて肝心の授業内容ですが、セブ島の英語留学は身も蓋もない言い方をすると「オンライン英会話のオフライン版」というものでした。つまりわざわざセブ島まで行かなくても、日本で1日6時間のオンライン英会話を予約して受講すれば同等レベルの勉強は可能というわけです。違いはオフラインでリアルに先生と話すか、スカイプ越しにオンラインで話すかの違いだけです(まじでこれだけです)。

しかし、日本にいながら6時間の授業を受けることはなかなか難しく、彼の地での生活を含めた非日常的な環境で英語を勉強すること自体を楽しむ目的であれば、セブ島に行く価値はまぁあるかもしれません。

私が行った学校では、使用する教材はESL向けのテキストがコピーして配布されました。いわゆる海賊コピーですね。しかも何回もコピーを重ねているせいかめちゃくちゃ読みにくかったです。テキストは問題や解説を含めて全て英語での表記なので、この意味でも英語初級者がセブ島に行くと苦労しそうです。初級者のうちは日本語の教材で文法や語彙をマスターした方が絶対効率がいいです。

文法はGrammer in useという英語圏での文法教科書のコピーが教材としてありましたが、やはり日本の教材の方が理解のしやすさでいうと何枚も上です。文法の理解であれば母国語の教材でやったほうが何倍も効率がいいです。(「英語を英語で勉強する」って一見効率よくかっこよくも思えますが文法はさっさと仕上げるべき学習項目なので、母国語で習得して次の段階にいったほうがよい)

TOEIC700ぐらいまでは国内で自力で引き上げ、どうしてもセブ島に行きたい人は1−2週間で行くのがセブ島英語留学の使い方だと思います。

半年や一年をセブ島で過ごす留学コースが多いようですが、正直いくら時間がある学生でもこの期間をセブ島で過ごすのは時間とお金の無駄ですね。留学はその国で勉強するために行くべきもので、英語はその勉強のためのツールに過ぎません。ツールの習得だけであれば日本で働きながらでも充分できるわけで、わざわざツールのためだけに海外留学と称して半年間も行くのはどうかなと思います。後述する普段の生活も決して暮らしやすい地域ではありませんし、同じ遊ぶのであれば様々な地域を旅したほうが自分の血肉になると思います。

各英語学校ともSEOにかなり力を入れており「半年間留学さえすれば英語ができるようになって就職もバッチリ」みたいなブログが溢れているので、この辺りは煽り側の事情をきちっと理解した上で、うまく情報を扱う必要があります。

テキストはすべて違法コピー!

授業中の工夫

ということで私の場合、初日の数時間で「セブ島留学=オンライン英語と同じ」という達観をしてしまったので、今回の留学は、ひたすら会話をする中で、詰まった表現や単語をあぶり出しそれをメモして復習する、という方針にしました。

その際、言い回しでおかしい点があれば都度指摘するようお願いしました。

「この表現で違和感ない?」とか「他の言い方ってある?」などで都度指摘をしてもらったり「あなたの考えは?」「フィリピン人は通常どう考える?」などの問いかけで教師のリアルトークを引き出しながら授業を進めました。

当初は朝の9時から昼休みを挟んで6時間、16時までのスケジュールを組みましたが、集中力はせいぜい2時間程度しか続かなく、復習の時間も考えて、翌日からは5時間にカットしてもらいました。

教師の質

教師はほとんどが大学を出たてといった感じの若いお姉さん達です。皆さんある程度の教養はある感じでした。またフィリピン人特有の明るいノリを持った人たちなのでこの点は助かりました。

ただし語学教師としてのメソッドが豊富にあるかというとそこは余り期待はできなく、放っておくと単にテキストに沿って読み進めることになってしまうので、先ほど述べたように自分がリードして受身にならないようにしないと、何となく時間が過ぎてしまう事になります。

適度に話題を振ったり指摘してほしい点を伝えればどんどんツッコミを入れてくれるし一緒に表現を考えたりをしてくれます。考えてみると、このように一緒に会話を作り上げることがしやすいのは、オンラインよりオフラインの方が有利な点かもしれません。

現地環境

セブ島はリゾート地域とダウンタウンに大きく分けられますが、学校があるのはダウンタウンです。ダウンタウン(セブシティ)はイメージでいうとインドのカルカッタをライトにした感じで、大量のバイクと車が行き交う埃っぽい街でセブ島リゾートのイメージとは全くかけ離れています。

学校へタクシーで向かう途中で水道管破裂の現場に遭遇。子供は大喜びでプール状態、大人はタンクを持ってきて水を汲んでいた(笑)

南の島でまったりしながら英語も勉強、などは期待してはいけません。リゾートがあるマクタン島での宿泊も考えましたが、シティから車で一時間ほどかかるため通学できないし何より物価が高いので諦めました。

混沌のセブシティの中に「IT Park」という経済特区があります。この地域だけは整然と道路が整備され新しいビルが立ち並び緑も多く、外資系企業や多くの英語学校が集まっています。ですので英語学校を探す際は、IT Parkに教室があるかどうかを一つの目安にするといいと思います。この区域は治安も良いし日本食を含めたレストランも多くあり、学生生活には困らないです。

IT Parkはセブ市街とは思えないほど整然としています

セブのホテル

英語学校は基本的に寮生活もセットになっています。しかし私のような社会人にとって寮生活はさすがに自由度もなく生活環境も厳しそうなので、自分でホテルを手配しました。

初めて訪問する旅先のホテル選びって本当に難しいですよね。ホテルは旅の品質を左右する重要ファクターにもかかわらず口コミ情報やホテルのサイトからは自分の希望に合っているかどうかがなかなか分からないものです。口コミなんて自分が何を重視するかでいくらでも評価がわってきますからね。

とはいえ、予約もせずに現地に行って探すのも大変なので、私の場合は最初の二、三日分を日本から予約しておいて残りの宿泊は土地勘が出来てくる頃に現地で予約するスタイルを取っています。現地の旅行代理店経由で残りを予約した方が安いケースもありますしね。

今回の最初の宿は、IT Parkからタクシーで20分ほどのクエストホテルを予約しました。一泊五千円程度の中級シティホテルです。セブ島の物価からすると相当高価ですが、ホテル自体の高級感はそれほどでもありませんでしたが、ただ後ほど現地で実際に見て回った同等レベルのホテルと比較すると、立地、スタッフ、食事の項目ですべて満足感が高かったです。最終的にはこのホテルを延泊しましたがそれを感謝されてか部屋をアップグレートしてもらいました。

マーヨホテル

ちなみに最終日は空港からほど近いマーヨホテルというところに泊まってみました。ここは2年前にできたとてもきれいでスペースも広々としたセブシティの中ではナンバーワンと言ってもいいホテルでした。

屋上には小さなプールやバーもあり、風が抜けて空港を見渡す景色が最高でした。ただし市街地から遠いので英語学校に通うにはお勧めしません。

Taxi as a service

セブシティでの移動は全てタクシーでした。地図を見てみて「500mぐらいなら歩けるかな」と一度試してみたところ、行き交う車の道路を渡るのにも命がけ、歩道も途中で途切れてるし、引ったくりにも目を配る必要があるなど歩きの移動はとてもお勧めできません。セブ経済にお金も落とす意味でも距離に関わらずタクシーに乗りまくりましょう。

タクシー利用の際は、GrabというUberと同じようなアプリが大活躍するので、日本にいるうちにアカウントとクレジットカードの登録を済ましておいてください。Grabはアプリから自分の位置と行きたい場所を登録すると車がアサインされ、あとは勝手に目的地まで運んでくれます。お金のやりとりはキャッシュカードでアプリに課金されるためドライバーと直接お金のやり取りする必要がありません。

運転手と行き先の確認や財布を取り出すストレスもなく素晴らしい仕組みです。タクシーはもはやソフトウェアサービスそのものになっていました。買い物はAmazonによってすでにサービス化されているし今後もどんどんこのようなサービスが生まれてくるのだと思うと本当にワクワクしますね。

ちなみにこのサービスは日本人には発想はできても作れないサービスですね。規制がいかに経済やイノベーションを押し下げるかを体感しました。とにもかくにも滞在中のGrabは必須ツールなのでぜひインストールをしておきましょう(日本で設定しておくことをお勧めします)。

セブ島での食事

レストランは高級ホテルを含めて色々と探索しましたが、フィリピンにおける食事の基本は炭水化物と油がメインであることが身をもって分かりました。タンパク質はフライドチキンなどの揚げ物がメインで、期待した豆類もほとんど見られませんでした。また生野菜を食べる習慣がないらしくこの点も苦労しました。ただ、クエストホテルの朝ビュッフェはサラダが出るので毎朝大皿に2杯ぐらい食べて野菜補給をしていました。

今回は台湾を乗り継ぎにしてセブ島に入ったのですが、食事がきつすぎて予定を一日早めて台湾に帰ってしまったほどです(笑)
この意味でもセブ島での生活は英語学習以前にそこそこタフであることを認識しておいた方がいいですね。

アヤラモールのフードコート。チキン&ライスを持ち帰りで。甘辛い味も飽きてくる。

いきなりの長期留学はハイリスク

今回の経験をベースにセブ島に英語留学を考えている方にアドバイスです。

インターネット上にはセブ留学に関する情報はたくさんありますが、そこはやはり情報の中立性はほぼないと思った方がいいですし、実際に行かないとわからないことが多いです。

おすすめはいきなり数ヶ月行くのではなく、まずは一週間程度で旅行がてら実地検証するぐらいの気持ちで行ってみることです。いきなり長期でいくと想定と異なる自体に直面しても前払いした留学費用は帰ってこないし、異国滞在中に色々とリカバリするのは現実的に難しいからです。セブ島へは直行便の他にも台湾経由で行けたりもするので、台湾とセブを旅行がてら行ってみるのもいいかもしれませんね。

セブに限らず語学留学は甘美な広告文句と裏腹に、投資対効果をきちんと評価、見極めた上で目的を設定しないと大抵失敗(金と時間を浪費)しますよー。

台湾の屋台で生き返るの図

関数をがっちり理解する

本日は投プロ会(投資家のためのプログラミング勉強会)「初級編」の締めくくりです。

第1回から第7回までに、投資活動のお便利アプリ開発を通して、これらのことを学びました。

ここまで理解できればプログラミングの初級者としては十分な力を持っていると考えてよいでしょう。

次回からの中級編に進めば、ウェブサイトから自分が欲しい情報を自在に取ってきたり、それらのデータを集計、分析した結果をエクセルに一発で保存したり、といったことができるようになります。

これにより投資情報の取得/整理/分析に労力を割く必要がなくなり、自己の投資判断にのみ集中できる環境を実現できるようになります。

さて、本日は前回作製したアメカブくんを例にして、今一度「関数」について理解を深め初級編の締めくくりとします。

関数の考え方はプログラミングをしていく上で非常に重要なものとなります。関数の定義方法はもちろんのこと、そのメリットをしっかり理解していきましょう。

第5回で学習した通り、関数とはあらかじめ決められた処理を一つの塊として定義しておくことです。

例えばprint()という関数は、括弧内に値(パラメータ)を入れると、その値をディスプレイに表示する関数でした。またlen()は文字列やリスト型のパラメータを入れるとその長さを返す関数です。

これらの関数はPythonにあらかじめ用意されている「組み込み関数」でしたが、独自の関数を定義させることもできます。

たとえばパラメータに指定された文字列に!をつけて表示した後にその文字列長を表示する関数を作ってみましょう。

上記の結果を確認してみてください。

このように、あらかじめ決まった処理(今回の場合は「パラメータの最後に!をつけて表示した次にパラメータの文字列長を表示する」)を関数として定義することで、それを呼び出すことができます。

独自関数の定義の仕方は次の通りです。(詳細は教本の3.1も参照してみてください)

では独自関数を定義するメリットはなんでしょうか。大きく2つあります。

  • ソースの可読性をあげる
  • メンテナンス性の向上

例えば前回のコードを関数を使わずに書いてみます。

ごちゃごちゃとかなり読みにくくなりましたね。。。

書いた直後であればそんなに気にならないかもしれませんが、1ヶ月、1年後に見返すとなると、最初から最後まで処理内容を確認する必要があります。

最初のコードのように、共通の処理部分を関数にしておくことでprint_bikkuri()の処理内容を把握するだけで、その後はパラメータのみに集中してソースを読むことができます。

2つ目の「メンテナンスの向上」はどうでしょうか。

一度書いたソースを「やっぱり”!”ではなくて”?”にしたいな」とか「文字列の長さは表示しなくていいや」となった場合に、独自関数を使ったケースとそうでない場合の修正箇所を比較してみましょう。

いかがでしたか?

前者は2箇所のみ、後者はその3倍の6箇所も修正する必要がありました。

まとまった処理を関数にすることにより、変更したい部分ができても、関数内だけを直せば、全てを修正できるのがメリットの一つ目です。

変更箇所が複雑になったり繰り返す処理が多くなったりするほど関数化の恩恵を受けることが分かりますね。

プログラミングの世界では「同じことを二度書かない」という不文律があります。英語ではDRY:Don’t Repeat Yourselfといったりします。この考え方は非常に重要なことですのでぜひ頭に入れておいてください。

気がつけば同じ処理をいろいろなところで書いているな、とか、コードをコピペしたくなったら、それを関数にできないかを必ず確認しましょう。関数化によりメンテナンス性と可読性があがりますので効率的にアプリを作製することができるからです。

関数化=未来の自分への投資とも言えますね(^^)

それでは最後に前回作ったアメカブくんを「関数視点」でもう一度眺めてみましょう。

ここでは次の2つの関数を使ってアプリを作りました。

  • get_stock_news() :銘柄名を入れると、それに関連する英語のニュースをリストで返す関数
  • translate_en_jp() :英文を入れると、それを日本語に翻訳して返す関数

アメカブくんの作製にあたって、われわれはこれらの関数のパラメータと戻り値のみに意識を向ければよく、中身の処理内容は理解の必要なくアメカブくんを実装できました。これが「可読性」です。

またこのアプリを、ニュースではなく指定した企業のIR情報を返したり、日本語訳ではなく英語のまま返すように変更したい場合は、それぞれの関数を変更することで我々が実装した部分は変更することなく(メンテナンス性高く)、アプリを改造することができます。

関数化することで複雑な処理を読みやすく、メンテナンスしやすくなることを感じていただけたでしょうか?

次回からの中級編ではより実践的な内容を学んでいき、世界の株式情報をより効率的に処理できるようなアプリを作っていきましょう!

 


退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

こちらの本を教本にした「投資家のためのプログラミング勉強会(投プロ会)」を主宰しています。
そもそもプログラミングとはなんぞや、Pythonを実行させる環境をどのように用意するか、などプログラミングにおける超基本的な内容が、我々のような「非ソフトウェアエンジニア」向けに分かりやすく記載されています。はじめの一歩にはこれ以上ない教材です

二日酔いでどうしようもない時に効く魔法の水

元々はトライアスロンのために購入したこちらの経口補水ですが、同じ喉の渇きを癒したい二日酔いの朝にもすこぶる効果を発揮してくれます。

水だけだとつい飲みすぎてお腹がガボガボになるし、そもそも体内の塩分濃度が薄くなり逆に脱水を進めてしまいます。だからといって塩をなめるのもちょっと抵抗がある。

ポカリなどのスポドリは、砂糖がめちゃめちゃ入っている(角砂糖で10個ぐらい!)ので余計なカロリーを摂ってしまいます。

こちらの経口補水は水分を効率よく体内に取り込める成分となっていて、パウダーなので水の量で濃度が調整できるのもグッドです。味わいは、ポカリから砂糖を引いたほどよい塩分で、水分がするすると体に吸収されていく感じがします。

スポーツや二日酔いだけではなく、海外旅行中に下痢に襲われたときや、インフルエンザで寝込んだ時とかにも体への負担を軽減してくれて、常備しておくと何かにつけて便利です。

米国の株式ニュース中に「配当」の文字があったら装飾して表示する

書籍「退屈なことはPythonにやらせよう」を教本にした「投資家のためのプログラミング勉強会(投プロ会)」の第7回目です。

これまでの勉強会では、プログラミングのベースとなる「変数」「条件分岐」「ループ」を学んできましたが、このあたりで復習を兼ねて、第1回からの演習を自力でやってみることをお勧めします。

プログラミングはコードをただ書き写しているだけではできた気になるだけで、いざやりたいことを書こうとしてもなかなか手が動かない、といったことが多いです。

二度、三度と自分の手でコードを書くことで基礎を固めていく方法がお勧めです。英語でもなんでも同じだと思いますが、基礎を固めることで、新しいことを勉強する際にいちいち後ろに戻って確認するストレスが無くなり、学習効率が上がるというわけです。

ということで、本日は文字列に対する操作を学びながら、前回作ったアメカブくんを改良してきましょう。

アメカブくんは指定したティッカーの企業名で米国のニュースサイトを検索し、日本語に翻訳してくれるアプリでした。こんな感じです。

今回はさらに、ニュースの題名にキーワード(例えば「配当」)という単語が含まれていたら、【】で囲んで目立つように表示形式を変えてみましょう。

例:

元の文:アトラシラン(TEAM)は本日の決算発表で配当を$10とする増配をアナウンスしました。

変更後:アトラシラン(TEAM)は本日の決算発表で【配当】を$10とする増配をアナウンスしました。

#ニュースは私の妄想です(^^)

元の文をこのように変更するためには、文字列操作について以下の事項を学ぶ必要があります。

  • 文字列中でキーワード「配当」を検索して、この単語が含まれているか否かを調べる
  • 含まれている場合は位置情報(インデックス)を取得する
  • 文字列中の指定した位置に文字【と】を挿入する

それでは文字列中でキーワードを検索する方法から学んで行きましょう。

と、その前に、Pythonにおける文字列の約束事を一つだけ確認しておきましょう。

変数に文字列をセットする際はこれまでこのようにしてきました。

ここで重要なのは 、Pythonにおける文字列は “(ダブルコーテーション)で囲むということです。試しに ” で囲まないで変数を宣言した下記のプログラムを実行してみてください。

エラーになりましたか?

Pythonは文字列を ” で囲んではじめてそれが文字列であることを認識します。逆に ” で囲まないと文字列以外の数値型や他の特殊な型として認識しようとしておかしな動きになりますので「Pythonにおける文字列は ” で囲む」を常に意識してください。

ちなみに ” ではなく ‘ のシングルコーテーションで囲んでも同じ意味となります。最新のPythonの文法ではシングルコーテーションで囲むとなっていますが、他の言語ではダブルコーテーションの ” で囲む場合も多いということと、筆者の趣味もあり、本勉強会では ” で囲む記法を採用しています。

どちらを使ってもOK なのですが、他の人がコードを読んだ時に混乱しますので、混在させるのではなく、どちらかに統一するようにしてください。

それでは本題の文字列中でキーワードを検索する方法を学んでいきます。

Pythonで文字列を検索するにはfind()関数を使います。find()関数は指定した文字が存在する場合はその位置情報を返します。それではさっそく試してみましょう。

newsという変数にニュース文を、key_wordという変数に検索したい単語 “配当” をセットして、newsの中にkey_wordが含まれるかどうかをfind()関数で調べて、位置情報をindexという変数にセットしています。

上記の実行結果は 21 と表示されました。

それではkey_wordを “配当” から “TEAM” に変更して再度実行してみましょう。

今度は 7 と表示されました。

このindex変数にセットされた位置情報は何を表しているのでしょうか?

ピンとこない場合は、さらにkey_wordを “アトラシアン” にして実行してみましょう。(すでに分かっている方は出力結果を予想してみてください)

今度は 0 と表示されました。

そうです、このfind()関数は指定したキーワードが何文字目に現れるかという位置情報を返してくれる関数なのです。

最初に指定した “配当” は22文字目に現れますし、”TEAM” は8文字目、”アトラシアン” は1文字目に現れます。

前回学習したリストと同じく、Pythonに限らずプログラミング言語の多くでは、順番を表現する際は0から開始しますので、それぞれ 21 / 7 / 0 と表示されたわけです。

それではもう一つ、存在しないキーワードをfind()関数にセットした場合 indexに何が返ってくるでしょうか。(実際に手を動かしてやってみてくださいね〜)

はい、存在しないという意味で位置情報としてはありえない -1 という数字が返ってきました。

ではfind()関数のこれらの性質を利用して簡単なプログラムを作ってみましょう。

news変数の文字列の中に、キーボードから入力した文字が入っているかどうかを判断して、

文字が入っていた場合:「あり!」

文字が入っていなかった場合:「なし!」

それぞれ上記の表示をするプログラミングを書いてみましょう。もちろん前回学習した条件分岐のifとwhileループも使いますよ。(想定時間:5min)

書き方はいろいろありますが私は上記のように作りました。まず最初に入力された文字が “END” であればプログラムを終了する処理を入れています(これがないと無限ループになってしまいます)。

そして、入力された文字をfind()関数に渡して、その結果が -1 かどうかでnews変数の文字列中にあるかないかを判断しています。( != は == の反対で、Falseの場合にTrueとして条件分岐する比較演算子です。詳しくは教本の2.2を参照してください)

いかがでしたか?このアプリを実行して、いろいろな単語や文字を入力しながら正しく動くかどうかを確認してみてください。

ちなみに、文字列の中に単語があるかないか「だけ」を調べたいときはin という演算子も使えます。(もちろんfind()関数をつかってもよいのですが、より直感的なコードにするために in を使うことをお勧めします)

newsという変数にニュース文を、key_wordという変数に検索したい単語「配当」をセットして、newsの中にkey_wordが含まれるかどうかをinという演算子で調べて、その結果をprint()関数で表示しています。in は含まれていればTrue、そうでなければFalseを返します。

さきほどの課題を in を使って書くとこのようになります。

inはいろいろなところで出てくる演算子です。第5回のリストに要素が含まれるか、forループでリストから順番に要素を取得する場面などです。

上記は東証の株価コードをリスト変数に入れて、指定したコードがそのリストに含まれているかを確認しています。考え方は文字列内の単語検索と同じですので便利なinを是非習得してください。

それでは、キーワードが現れる位置情報が取れるようになったところで、指定した箇所に【と】のカッコを挿入して、配当という文字が目立つように改造していきましょう。

Pythonにおける文字列の扱いで便利な点がスライスという考え方です。Pythonでは文字列をあたかもリストのごとく扱うことができます。



と表示されたかと思います。このように文字列変数に[]をつけてインデックスを入れるとその位置の文字を取り出すことができるのです。もちろんリストと同様に -1 をいれると後ろから一つ目の文字を取得できます。

さらに便利なのがスライスもリストと同じように扱えます。

news[0:6]とすると0番目から6番目の文字列を抽出できます。news[13:]と終わりのインデックスを省略すると、その文字列の最後までを切り取ります。どうようにnews[:12]は最初のインデックスを省略しているのでnews[0:12]と同じ意味となります。(スライスとは切り取るということですね)

では上記の表示結果を確認してみてください。

アトラシアン
本日の決算発表で配当を$10とする増配決議をしました。
アトラシアン(TEAM)

str1〜str3の変数にそれぞれ上記の文字列がセットされたことがわかると思います。(スライスについては教本の6.1.2も参照ください)

ここまでくれば、”配当” の前後に【】をつけた文字列を作るのは簡単です。

考え方としては以下の順番でプログラミングするとよいでしょう。

  1. “配当” の文字が現れるインデックスを取得する
  2. 取得したインデックスの前後の文字列をスライスで変数にそれぞれセットする
  3. 【】をそれぞれの変数に加えて作りたい文字列を生成して表示する

ちなみに文字列同士をくっつけるのは +演算子を使います。使い方は第1回で学んでいますので確認してください。

ではアメカブ君の改造の前に、さきほど作ったfind()関数を使ったプログラムを改造して、指定した文字列の前後に【】をつけて表示するプログラムを作ってみましょう。

ちょっと頭をひねる必要がありますが、ポイントは文字列をどのようにスライスして、最後にどのようにくっつけるか、です。それでは Let’s try! (目安時間:10min)

いかがでしたか?うまくスライスできましたか?文字列を切り取る際のlen()関数の使い方も要チェックですのでしっかり理解していきましょう。

この技がマスターできれば様々な文字列操作が行えますので、例えば企業名から特定の文字を削除したり、URLの文字列を自在に作成したりなど、後々必要になってくる文字列操作の基礎ができたとも言えますよ。

それでは本日最後の課題です。先日作ったアメカブ君を改造して、配当という文字の前後に【】をつけて表示するアプリにバージョンアップしてみましょう。前回作成したアメカブ君はこのようなものでした。

翻訳結果の文字列がセットされている trans変数をそのままprint()関数で表示するのではなく、find()関数をつかって配当という文字が見つかったら【】をつけて表示するように改造してみましょう。(所要時間:5min)

いかがでしたか?上のプログラムでは配当という文字が入っていたら【】をつけて表示、なければそのまま表示という条件分岐を追加しています。実際に試してみてアメカブ君の使い心地がよくなったか実感してみてください。

今回もループと条件分岐がたくさん出てきましたが、前回同様、プログラミングはループと分岐でできているといっても過言ではありません、ぜひ慣れていきましょう。

本日はここまでです。お疲れ様でした!

 


退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

こちらの本を教本にした「投資家のためのプログラミング勉強会(投プロ会)」を主宰しています。
そもそもプログラミングとはなんぞや、Pythonを実行させる環境をどのように用意するか、などプログラミングにおける超基本的な内容が、我々のような非ソフトウェアエンジニア向けに分かりやすく記載されています。はじめの一歩にはこれ以上ない教材です(^^)

Social media & sharing icons powered by UltimatelySocial