Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
モダンGASプログラミング
Search
jalemy
July 31, 2019
Programming
1.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
モダンGASプログラミング
jalemy
July 31, 2019
More Decks by jalemy
See All by jalemy
AWS LightsailでHTTPS対応WordPress構築 & ShifterでサーバーレスWordPress
jalemy
0
450
Flutterレイアウト入門
jalemy
0
280
Other Decks in Programming
See All in Programming
カツオ、ご期待ください
suneo3476
0
160
phperだってパンチカードでコーディングしたい
o0h
PRO
0
240
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.4k
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
310
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
580
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
510
mrbgem 三角測量 開発
ogom
0
220
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.5k
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
480
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.8k
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
150
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8k
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
1.9k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
580
Making Projects Easy
brettharned
120
6.8k
KATA
mclloyd
PRO
35
16k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
WCS-LA-2024
lcolladotor
0
860
Docker and Python
trallard
47
4.2k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
540
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.1k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Statistics for Hackers
jakevdp
799
230k
Transcript
モダンGASプログラミング ゆるはち.it 2019/07/31 @jalemy
自己紹介 • 名前:佐野友亮(@jalemy) ◦ じゃれみーって呼んでください • Unityでクライアントエンジニア3年くらい ◦ モバイル向けゲームの開発 /運用
• 今年6月からWebエンジニア ◦ Laravel + Vue.js
スプレッドシート使ってますか?
GAS書いてますか?
GASとは • Google Apps Script • Googleが提供するサーバサイド・スクリプト環境 • ベースはJavaScript ◦
JavaScriptに慣れ親しんでいればサクサク書ける • スプレッドシートなどのGoogleサービスと連携が楽
GASの活用事例
Googleフォームを月初に自動で作成したり
Googleカレンダーを自動で作成したり
スプレッドシートと連携したり
• Webページのスクレイピング • (簡単な)Webアプリケーション • データ集計 • Web API •
etc………… (やろうと思えば)なんでもできる! ……❓ GASの活用事例
GASの長所・短所
長所♂ • サーバ管理不要 • 学習コストが低め • 各種Googleサービスと連携しやすい ◦ インタフェース開発コストの削減 •
権限管理を全てGoogleに任せられる
短所♂ • 複数人開発がし難い ◦ 属人化したコードが生まれる • 処理時間の壁(6分間の壁) • インタフェースと密になりがち ◦
利用者がシートをいじってしまって動かないなど……
GAS+スプレッドシート でHello Worldデモ
• スプレッドシートに紐づいたスクリプトが生まれる ◦ 実態はGoogle Driveに存在している • 自分の好きなエディタを使いたい • バージョン管理したい ◦
一応できるにはできるが使いづらい ……
claspを利用しよう✍
claspとは • Google謹製のCLIツール ◦ https://github.com/google/clasp • npmでインストールできる ◦ `npm install
@google/clasp -g` • GASプロジェクトの新規作成、アップロード /ダウンロード バージョン管理、デプロイ、エディタで開く といったことができる
clasp利用デモ
claspの弱点 • pushしないとデバッグし難い ◦ しかし、pushしたら本番環境(?)が変更されてしまう ◦ 複数人開発するとなると致命的 デバッグするときは”.clasp.json”をいじって、環境を差し替える ”clasp run”を利用して、ローカルでテストする
.clasp.json • 中身はこんな感じ • “scriptId”を変更すれば、 push先を変更できる
clasp run • GCPで認証情報を作成する • クライアントIDなどの情報が詰まった “jsonファイル” をダウンロード • “jsonファイル”
を “creds.json” とリネームし、プロジェクト直下に配置 • clasp login –creds creds.jsonとコマンドを入力し、認証作業を進める • clasp run で関数を選んで実行 手順が長いのでこのあたりを参考にしてください https://officeforest.org/wp/2019/04/07/google-apps-script%E3%82%92%E3%83%AD%E3%83%BC%E3% 82%AB%E3%83%ABpc%E3%81%A7%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B%E6%96% B9%E6%B3%95/
デモ
気づいた方もいるかも……
clasp Code.gs Code.js .gsから.jsにトランスパイルされている (その逆も)
TypeScriptデモ
GASでWebスクレイピング
GASでWebスクレイピング 基本的にはこれだけ 1. UrlFetchApp.fetch(uri, params)を利用して、レスポンスを取得 2. getContentText(charset)で、contentだけ抜き出し 3. HTMLタグなどを利用して、欲しいデータを抽出
• https://github.com/jalemy/connpass-gas connpassのgroup_idを指定して、 イベントページから参加者のみリストアップする (突貫工事のためコードが汚いですが、ご了承 ください)
動作確認デモ
• Web上で公開されているライブラリを利用することができる • appsscript.jsonで管理される • GUIでは、リソース > ライブラリ で追加できる ライブラリ
https://www.kutil.org/2016/01/easy-data-scrapping-with-google-apps.html appsscript.json
トリガー • 編集 > 現在のプロジェクトのトリガー から、 トリガーを設定できる • 毎週日曜日の12時に実行など設定できる •
自動化しやすい
まとめ • claspを利用すればGASをgit管理できる • 外部ライブラリや、GASのpush先もコード化される • (ちょっと面倒だけど)ローカルでのテストも可能 • GASでトリガーを設定できるので、自動化便利 GASでモダンっぽくプログラミングしましょう
ご静聴ありがとうございました