当然ã®ã“ã¨ãªãŒã‚‰æ™®æ®µã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã¯PCã§è¡Œã£ã¦ã„ã¾ã™ã€‚
ã¨ã“ã‚ãŒã€é›»è»Šã®ä¸ãªã©ã¡ã‚‡ã£ã¨ã—ãŸéš™é–“時間ã«ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãŒã§ãã‚‹ã¨ã„ã„ãªã¨æ€ã†ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
ã¡ã‚‡ã£ã¨ã‚¢ã‚¤ãƒ‡ã‚¢ã‚’æ€ã„ã¤ã„ãŸæ™‚ã‚„ã€ãƒã‚°ã«æ°—ã¥ã„ã¦ä¿®æ£ã—ãŸã„ã¨ããªã©ãŒã—ã°ã—ã°ã‚ã‚Šã¾ã™ã€‚
ã‚‚ã—ã‹ã—ãŸã‚‰ã€ã‚¼ãƒã‹ã‚‰ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‚’作りãŸã„ã“ã¨ã‚‚ã‚ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。
iPhoneアプリã§ã€GitHubã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã„ãã¤ã‹ã‚ã‚Šã¾ã™ã€‚
ãã®ã†ã¡ã®ã„ãã¤ã‹ã¯ã‚¨ãƒ‡ã‚£ã‚¿æ©Ÿèƒ½ã‚’å‚™ãˆã¦ã„ã‚‹ã‚‚ã®ã‚‚ã‚ã‚Šã¾ã™ã€‚
ã—ã‹ã—ã€è©¦ã—ãŸç¯„囲ã§ã¯ã¨ã¦ã‚‚使ã„ãŸããªã‚‹ã‚ˆã†ãªã‚¨ãƒ‡ã‚£ã‚¿ã§ã¯ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
ã‚„ã¯ã‚Šã€iPhoneã§æ¥½ã—ãコーディングã—ãŸã„ã‚‚ã®ã§ã™ã€‚
iPhoneã®ã‚ˆã†ãªå°ã•ã„ç”»é¢ã§ã‚‚楽ã—ãコーディングã§ãるよã†ãªã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã‚ã‚Šãˆã‚‹ã®ã§ã¯ãªã„ã§ã—ょã†ã‹ã€‚
ç„¡ã„ã‚‚ã®ã¯è‡ªåˆ†ã§ä½œã‚ã†ã®ç²¾ç¥žã§ä½œã£ã¦ã¿ã¾ã—ãŸã€‚
今ã®ã¨ã“ã‚ã€GitHubé™å®šã§ã™ã€‚
色々ãªãƒ©ã‚¤ãƒ–ラリを組ã¿åˆã‚ã›ã¦ã€Webアプリã¨ã—ã¦ä½œã‚Šã¾ã—ãŸã€‚
特ã«ã€ace editorã®æ©æµãŒå¤§ãã„ã§ã™ã€‚ aceã¯ã€åŸºæœ¬çš„ã«ã¯iPhone/iPadã§ã‚‚å‹•ãよã†ã«ãªã£ã¦ã„ã¾ã™ã€‚
ãれをã•ã‚‰ã«ä½¿ã„ã‚„ã™ãã™ã‚‹ãŸã‚ã€è¡¨ç¤ºé ˜åŸŸã‚’大ããã—ãŸã‚Šï¼ˆãƒ‘フォーマンスã®å•é¡Œã¯æ®‹ã‚‹ã®ã§ã™ãŒï¼‰
「コマンドモードã€ã‚’å°Žå…¥ã—ã¦ã€vimã®ã‚ˆã†ã«ã‚«ãƒ¼ã‚½ãƒ«ç§»å‹•ãŒã§ãるよã†ã«ã—ã¾ã—ãŸã€‚
カーソルã‚ーå•é¡Œã¯ã€Androidã§ã¯ãªã„ã§ã—ょã†ã‹ã‚‰ã€iPhone特有ã®å•é¡Œã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。
作ã£ãŸWebアプリã®å称ã¯ã€CodeOnMobileã§ã™ã€‚
mobile codingã«ã—ã¦ã—ã¾ã†ã¨ã€ãƒ¢ãƒã‚¤ãƒ«å‘ã‘アプリã®ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã®æ„味ã«ãªã‚‹ã“ã¨ãŒå¤šã„ã®ã§ã€
coding on mobile (devices)ã‹ã‚‰å‘½åã—ã¾ã—ãŸã€‚
Webアプリã¯ã€
http://codeonmobile.axlight.com/
ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ãã ã•ã„。
ãã®å‰ã«ã€GitHubã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆãƒšãƒ¼ã‚¸
https://github.com/dai-shi/codeonmobile
を見ã¦ã¿ã‚‹ã¨ã‚ˆã„ã§ã—ょã†ã€‚ç°¡å˜ãªã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚ャストを載ã›ã¦ã‚ã‚Šã¾ã™ã€‚
ã¡ã‚‡ã£ã¨é•·ã„ã§ã™ãŒã€è¾›æŠ±å¼·ã見ã¦ã„ãŸã ã‘ã‚‹ã¨ã†ã‚Œã—ã„ã§ã™ã€‚
ãã‚Œã§ã¯ã€ãƒ¢ãƒã‚¤ãƒ«ã§ã®ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’楽ã—ã¿ã¾ã—ょã†ã€‚
モãƒã‚¤ãƒ«ãƒ•ã‚¡ãƒ¼ã‚¹ãƒˆã®æ¬¡ã¯ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ãƒ•ã‚¡ãƒ¼ã‚¹ãƒˆã£ã¦ã“ã¨ã§ã€å‰ã‹ã‚‰ä½œã£ã¦ã¿ãŸã„ã¨æ€ã£ã¦ã„ãŸã‚¢ãƒ—リを作ã£ã¦ã¿ã¾ã—ãŸã€‚
アプリ自体ã¯ã€Œãƒ¡ãƒ¢ã€ã‚¢ãƒ—リã§ç‰¹ã«ç›®æ–°ã—ã„ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“。機能もå˜ç´”ã§ã™ã€‚
ã§ã™ãŒã€BMEANスタックã§ä½œã£ãŸã“ã¨ãŒæ–°ã—ã„ã‹ã¨æ€ã£ã¦ã„ã¾ã™ã€‚
BMEANã¨ã¯ã€
を利用ã™ã‚‹ã‚½ãƒ•ãƒˆã‚¦ã‚¨ã‚¢ã‚¹ã‚¿ãƒƒã‚¯ã§ã™ã€‚
今回ã€ã€ŒRailsより簡å˜ã«Twitterクãƒãƒ¼ãƒ³ã‚’作るãŸã‚ã®node.jsã®ãƒ©ã‚¤ãƒ–ラリã€ã‚’目指ã—ãŸsocial-cms-backendを改良ã—ã¦Breezeをサãƒãƒ¼ãƒˆã™ã‚‹æ©Ÿèƒ½ã‚’è¿½åŠ ã—ã¾ã—ãŸã€‚ãã®ãŸã‚ã€ã‚µãƒ¼ãƒå´ã®ã‚³ãƒ¼ãƒ‰ã¯ã»ã¨ã‚“ã©æ›¸ã‹ãšã«ã‚¢ãƒ—リを作るã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€HTML5ã®ã‚ャッシュマニフェストを使ã†ãŸã‚ã«ã€connect-cache-manifestも利用ã—ã¦ã„ã¾ã™ã€‚
アプリã¯ã€OpenShiftを使ã£ã¦é…ç½®ã—ã¾ã—ãŸã€‚ãœã²ã€ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
http://notesappsample-nodeangularapp.rhcloud.com/
左上ã«LoginãŒã‚ã‚Šã¾ã™ãŒã€Loginã—ãªãã¦ã‚‚使用ã§ãã¾ã™ã€‚
ãã®å ´åˆã€localStorageã«ãƒ‡ãƒ¼ã‚¿ãŒä¿å˜ã•ã‚Œã¾ã™ã€‚
Loginã™ã‚‹ã¨SyncãŒä½¿ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã€ã‚µãƒ¼ãƒå´ã«ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å˜ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€è¤‡æ•°ã®ãƒ‡ãƒã‚¤ã‚¹ã§ãƒ‡ãƒ¼ã‚¿ã®åŒæœŸãŒã§ãã¾ã™ã€‚
iPhoneã®Webアプリã«ã‚‚ãªã‚Šã¾ã™ã€‚「ホーム画é¢ã«è¿½åŠ ã€ã—ã¦ãã ã•ã„。スプラッシュイメージãŒã†ã¾ã表示ã•ã‚Œãªã„ã®ã§ã™ãŒã€ã“ã‚Œã¯æ·±è¿½ã„ã—ã¦ã„ã¾ã›ã‚“。
ソースコードã¯ã“ã¡ã‚‰ã§ã™ã€‚よã‚ã—ã‘ã‚Œã°è¦‹ã¦ã¿ã¦ãã ã•ã„。細ã‹ã„ã¨ã“ã‚ã¯ã€Breezeã¨social-cms-backendãŒã‚„ã£ã¦ãれるã®ã§ã€ã ã„ã¶ã‚·ãƒ³ãƒ—ルã«ãªã£ã¦ã„ã‚‹ã¨æ€ã„ã¾ã™ã€‚
https://github.com/dai-shi/notes-app-sample
iPhoneã®Webアプリã¨ã„ã†ã®ã¯ã€Œãƒ›ãƒ¼ãƒ ç”»é¢ã«è¿½åŠ ã™ã‚‹ã€ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€ã¨ã„ã†ã‹ãƒ–ックマークã€ã™ã‚‹ã‚‚ã®ã§ã™ã€‚HTML5ã§ã‚‚ãã“ãã“アプリã£ã½ã作れã¾ã™ã€‚
ã•ã¦ã€HTMLã®ã‚¿ã‚°ã§ã€ã‚ºãƒ¼ãƒ ãªã©ã¯ç„¡åŠ¹ã«ã§ãã¾ã™ã€‚例ãˆã°ã€æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚
<meta name="viewport" content="width=device-width initial-scale=1, user-scalable=no" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
ã¨ã“ã‚ãŒã€ã“ã‚Œã ã‘ã ã¨ã€ç¸¦ã«ã¯ã‚¹ã‚¯ãƒãƒ¼ãƒ«ã§ãã¦ãƒã‚¦ãƒ³ã‚¹ã—ã¦ã—ã¾ã„ã¾ã™ã€‚コンテンツã®é«˜ã•ãŒã¡ã‚‡ã†ã©ã´ã£ãŸã‚Šã ã¨ã—ã¦ã‚‚ã§ã™ã€‚記憶é•ã„ã§ãªã‘ã‚Œã°ã€Androidã§ã¯ãã®ã‚ˆã†ãªã“ã¨ã¯ãªã‹ã£ãŸã‚ˆã†ãªã€‚
検索ã—ãŸã¨ã“ã‚ã€stackoverflowãŒã‚ã‚“ã•ã‹ãƒ’ットã—ã¾ã—ãŸã€‚比較的よãã¾ã¨ã¾ã£ã¦ã„ã‚‹ã‹ãªã¨æ€ã£ãŸã®ã¯æ¬¡ã®ï¼“ã¤ã€‚
http://stackoverflow.com/questions/9651215/how-to-disable-bouncing-in-html5-fullscreen-iphone-app
http://stackoverflow.com/questions/10357844/how-to-disable-rubber-band-in-ios-web-apps
http://stackoverflow.com/questions/7768269/ipad-safari-disable-scrolling-and-bounce-effect
çµå±€ã€JavaScriptを使ã‚ãªã„ã¨ã§ããªã„よã†ã§ã™ã。fullscreenã®ã‚µã‚¤ã‚ºã§ä½œã£ã¦ãŠãã¨ã€Safariã§è¡¨ç¤ºã—ãŸã¨ãã¯è¡¨ç¤ºã‚¨ãƒªã‚¢ãŒç‹ããªã‚‹ã®ã§ã‚¹ã‚¯ãƒãƒ¼ãƒ«ãŒå¿…è¦ã§ã™ã€‚ãã“ã§ã¡ã‚‡ã£ã¨ã ã‘工夫をã—ã¾ã—ãŸã€‚å‚考ã¾ã§ã«ã‚³ãƒ¼ãƒ‰ã‚’載ã›ã¦ãŠãã¾ã™ã€‚
document.addEventListener('touchmove', function(e) {
if (window.innerHeight >= document.body.scrollHeight) {
e.preventDefault();
}
}, false);
コンテンツã®å†…部ã§ã‚¹ã‚¯ãƒãƒ¼ãƒ«ã‚„ドラッグをã—ãŸã„å ´åˆã¯ã•ã‚‰ã«å·¥å¤«ãŒå¿…è¦ã‹ã¨æ€ã„ã¾ã™ãŒã€ãã‚Œã¯ã¾ãŸæ©Ÿä¼šã«è€ƒãˆã‚‹ã“ã¨ã«ã—ã¾ã™ã€‚
mobile-bookmark-bubbleã¨ã„ã†ã®ã¯iPhoneãªã©ã®Mobile Safariã§ã€Œãƒ›ãƒ¼ãƒ ç”»é¢ã«è¿½åŠ ã€ã‚’促ã™ãƒãƒƒãƒ—アップを出ã™ãƒ©ã‚¤ãƒ–ラリã§ã™ã€‚
ä¾å˜ãƒ©ã‚¤ãƒ–ラリもãªã比較的ãƒãƒ¼ã‚¿ãƒ–ルã«å®Ÿè£…ã•ã‚Œã¦ã„ã‚‹ã®ã§ã™ãŒã€
angular.jsã§ä½¿ãŠã†ã¨ã™ã‚‹ã¨ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®#ãƒãƒƒã‚·ãƒ¥ã§æŠ‘制ã™ã‚‹æ©Ÿæ§‹ãŒã†ã¾ãã‚ã‚Šã¾ã›ã‚“。
解決法ã¯è‰²ã€…ã‚ã‚‹ã¨æ€ã„ã¾ã™ãŒã€ãŠãらã最も手軽ãª$rootScopeを使ã†æ–¹æ³•ã‚’実装ã—ã¦ã¿ã¾ã—ãŸã€‚$rootScopeãªã®ã§ãƒªãƒãƒ¼ãƒ‰ã™ã‚‹ã¨ãƒªã‚»ãƒƒãƒˆã•ã‚Œã¾ã™ãŒã€ãã‚Œã¯ãã‚Œã§ã„ã„ケースもã‚ã‚‹ã§ã—ょã†ã€‚
コードã¯ã“ã¡ã‚‰ã€‚
angular.module('MyModule', []).run(['$rootScope', '$timeout', function($rootScope, $timeout) {
$timeout(function() {
var bubble = new google.bookmarkbubble.Bubble();
bubble.hasHashParameter = function() {
return $rootScope.bookmarkbubble_shown;
};
bubble.setHashParameter = function() {
$rootScope.bookmarkbubble_shown = true;
};
bubble.showIfAllowed();
}, 1000);
}]);
(よã考ãˆãŸã‚‰ã€$rootScopeã«å…¥ã‚Œã‚‹å¿…è¦ã¯ãªãã¦ã€$timeoutã®å¤–ã§ãƒ•ãƒ©ã‚°å¤‰æ•°ã‚’æŒã£ã¦ã„ã‚Œã°ã„ã„ã ã‘ã‹ã€‚$rootScopeã«å…¥ã‚Œã¦ãŠãã¨ã€HTMLå´ã‹ã‚‰ãƒ•ãƒ©ã‚°ã‚’æ“作ã§ãã‚‹ã“ã¨ãŒãƒ¡ãƒªãƒƒãƒˆã«ãªã‚‹ã®ã‹ã€ãªã‚‰ãªã„ã®ã‹ã€‚)
ã‚ã¾ã‚Šå‚考ã«ãªã‚‰ãªã„ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ãŒã€å‚™å¿˜ãƒ¡ãƒ¢ã§ã—ãŸã€‚
普段ã€Webアプリを開発ã™ã‚‹ã¨ãã¯PCã§Chromeã‚„Firefoxを使ã†ã®ã§ã™ãŒã€ãã®å¾ŒiPhoneã®Mobile Safariã§è¡¨ç¤ºã•ã›ã‚‹ã¨ã€Chromeã¨æ¯”ã¹ã¦ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆãŒãšã‚Œã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã—ãŸã€‚
ボックスã®é«˜ã•ã‚’em
ã§æŒ‡å®šã—ã¦ã‚‚ãã‚Œã«åŽã¾ã‚‹è¡Œæ•°ãŒå¤‰ã‚ã£ã¦ã—ã¾ã†ã®ã§ãªãœã‹ã¨æ€ã£ã¦ã„ãŸã®ã§ã™ãŒã€ã‚„ã£ã¨åˆ†ã‹ã‚Šã¾ã—ãŸã€‚
行間ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ãŒé•ã†ã‚“ã§ã™ã。ã¾ã‚ã€å½“ãŸã‚Šå‰ã¨ã„ã†ã‹ãªã‚“ã¨è¨€ã†ã‹ã€‚
ã¨ã„ã†ã‚ã‘ã§ã€CSSã§line-heightを指定ã™ã‚‹ã“ã¨ã§è§£æ±ºã—ã¾ã—ãŸã€‚
以å‰ç´¹ä»‹ã—ãŸã€
Inkã¨ã„ã†CSSフレームワークを使ã£ã¦ãŸã®ã§ã™ãŒã€<p>
を使ã†ã¨line-heightãŒæŒ‡å®šã•ã‚Œã‚‹ã®ã§ã€æ°—付ãã¾ã§ã«æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã—ãŸã€‚<div>
ã§æ›¸ã„ã¦ã„ãŸã¨ã“ã‚ã ã‘サイズãŒé•ã£ã¦ã„ãŸã®ã§ã€‚
ãã‚Œã ã‘ã§ã™ãŒã€å‚™å¿˜ãƒ¡ãƒ¢ã¨ã—ã¦æ®‹ã—ã¦ãŠãã¾ã™ã€‚
RSS Pipesã®è£œå®Œæ©Ÿèƒ½ã¨ã—ã¦ã®RSSリーダーをã€HTML5 Canvasã®ã¿ã‚’使ã£ã¦ã©ã“ã¾ã§ã‚¹ãƒžãƒ›ã‚¢ãƒ—リãŒä½œã‚Œã‚‹ã®ã‹æŒ‘戦ä¸ã§ã™ã€‚
ã¾ã ã€ã‚¹ã‚¯ãƒãƒ¼ãƒ«ã®å‡¦ç†ã‚’実装ã—ã¦ã„ã¾ã™ã€‚KineticJSã§ã§ãã‚‹ã ã‘ç°¡å˜ã«ã‚„ã‚ã†ã¨è€ƒãˆã¦ã€ãƒ‰ãƒ©ãƒƒã‚°ï¼†ãƒ‰ãƒãƒƒãƒ—ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’ã¤ã‹ã£ã¦ã‚„ã‚Šã¾ã—ãŸã€‚
スマホã§ä½¿ã†ã«ã¯ã€ã‚„ã¯ã‚Šæ…£æ€§ã‚¹ã‚¯ãƒãƒ¼ãƒ«ãŒé‡è¦ã§ã™ã€‚æ£ã—ã„呼ã³æ–¹ã¯çŸ¥ã‚Šã¾ã›ã‚“ãŒã€ã‚ã®æŒ‡ã‚’離ã—ã¦ã‚‚ã—ã°ã‚‰ãスクãƒãƒ¼ãƒ«ã—ã¦ã„ã‚‹ã‚ã‚Œã§ã™ã€‚
ã¾ã˜ã‚ã«ç‰©ç†ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ã—よã†ã‹ã¨ã‚‚æ€ã£ãŸã®ã§ã™ãŒã€ä½¿ã„ã‚„ã™ã‘ã‚Œã°ã„ã„ã ã‚ã†ã¨ã„ã†ã“ã¨ã§æ„Ÿè¦šçš„ã«ãƒ‘ラメータ調整ã—ã¾ã—ãŸã€‚KineticJSã§ã¯ã“ã“らã‚ãŸã‚ŠãŒé™ç•Œã§ã—ょã†ã‹ã€‚
ã¡ãªã¿ã«ã€iPhoneã®è¤‡æ•°ã®ã‚¢ãƒ—リã§ã‚¹ã‚¯ãƒãƒ¼ãƒ«æ“作を試ã—ã¦ã¿ã¾ã—ãŸãŒã€ã‚¢ãƒ—リã«ã‚ˆã£ã¦æŒ™å‹•ãŒé•ã†ã“ã¨ã«æ°—ã¥ãã¾ã—ãŸã€‚例ãˆã°ã€Safariã§ã¯ã‚¹ã‚¯ãƒãƒ¼ãƒ«ãŒæ¢ã¾ã‚‹ã®ãŒæ—©ã„ã§ã™ãŒã€Twitterã§ã¯ã—ã°ã‚‰ãスクãƒãƒ¼ãƒ«ã—ã¦ã„ã¾ã™ã€‚今ã¾ã§ã‚ã¾ã‚Šæ„è˜ã—ã¦ã„ãªã‹ã£ãŸã®ã§æ°—ã¥ã‹ãªã‹ã£ãŸã§ã™ã€‚
ã‚ã¨ã€ã‚¹ã‚¯ãƒãƒ¼ãƒ«é€”ä¸ã«ã‚¿ãƒƒãƒã—ã¦æ¢ã‚ã‚‹ã“ã¨ãŒç›¸å½“é‡è¦ã ã¨ã†ã“ã¨ã‚’å†èªè˜ã—ã¾ã—ãŸã€‚
コードã¯å°‘ã—é•·ããªã£ã¦ã—ã¾ã£ãŸã®ã§è¼‰ã›ã¾ã›ã‚“。ã‚ã¾ã‚Šç‰¹è¨˜ã™ã‚‹ãƒã‚¤ãƒ³ãƒˆã¯ãªã„ã§ã™ã€‚ãƒã‚¦ãƒ³ã‚¹ã™ã‚‹ã¨ã“ã‚ã¨çµ„ã¿åˆã‚ã›ã‚‹ã®ãŒã™ã“ã—ã‚„ã£ã‹ã„ã§ã—ãŸã€‚
全コードã¯ã“ã¡ã‚‰ã§ã™ã€‚
https://github.com/dai-shi/canvas-rss-reader/
実行サンプルã¯ã“ã¡ã‚‰ã‹ã‚‰ã€‚
http://canvas-rss-reader.herokuapp.com/
ã†ã¾ãã„ã£ãŸã‚‰ãƒ©ã‚¤ãƒ–ラリ化ã—ãŸã„ã¨æ€ã„ã¤ã¤ã‚‚ã€ä»Šã¯æ±ºã‚ã†ã¡ã®ã‚³ãƒ¼ãƒ‰ã«ãªã£ã¦ã„ã¾ã™ã€‚