- 0.0.1. MonacaとNCMBで目安箱アプリを作ってみよう
- 0.0.2. package.jsonにfilesを書かないあなたは、誰かを少しだけ不幸にしています
- 0.0.3. Denoで安全にevalしたい (Web Worker)
- 0.0.4. Astroとは何者なのか。
- 0.0.5. 無効化能力clearTimeoutを無効化するsetTimeoutを作る
- 0.0.6. [JS]なぜawaitはasync関数の中にしか書けないのか
- 0.0.7. Next.js+BULMAでアニメーション付きハンバーガーメニューを作る
- 0.0.8. PWAでバックグラウンドに回ったことを検知する方法
- 0.0.9. セレクトボックスを選択後、自動でサブミット(送信)する方法
- 0.0.10. Google アナリティクスの導入
- 0.0.11. 毎回ログインするの面倒だから自動でログインをできるようにした SBI証券編
- 0.0.12. Ajaxでページングした一覧ページから詳細ページへ遷移後にブラウザバックで一覧に戻っても、GETで一覧に戻っても、POSTで一覧に戻っても、F5でリロードしてもクリックした明細が画面内に表示されるサンプル
- 0.0.13. 【JavaScript】Optional chainingが凄く便利だった件
- 0.0.14. インスピレーションが湧かない人へ。今日から作れる挑戦しがいのあるアプリのアイディア5選
- 0.0.15. pdf.jsを使って画面をpdfにするときのテクニック
- 0.0.16. JavaScriptを基本からまとめてみた【よく見るエラーとその対策】【随時更新】
- 0.0.17. DynamoDB localを使ってDynamoDBをローカルでデプロイする
- 0.0.18. JSONでLISPの超循環評価器を定義してみた
- 0.0.19. ブラウザにマイクテスト機能を付ける
- 1. マイクテスト
MonacaとNCMBで目安箱アプリを作ってみよう
こちらは[目安箱アプリを作ってみよう【その1:画面の説明と匿名認証まで】 – モナカプレス](https://press.monaca.io/atsushi/6208)と[目安箱アプリを作ってみよう【その2:意見の投稿と一覧画面の作成】 – モナカプレス](https://press.monaca.io/atsushi/6222)をハンズオン用に再編集したものです。
## 体験できるもの
– Monacaを使ったアプリ開発
– Onsen UIを使ったネイティブアプリ風UIの作成法
– NCMBの匿名認証
– NCMBのデータストアへのデータ保存## 利用している技術、ライブラリ
このアプリで利用している技術やライブラリは次の通りです。
– Onsen UI
– ニフクラ mobile backend## ベースアプリ
ベースアプリは [NCMBMania/Monaca_Survey_App: Monacaの目安箱アプリ開発ハンズオンのベースです。](https://github.com/NCMBMania/Monaca_Survey_App) になります。下記URL
package.jsonにfilesを書かないあなたは、誰かを少しだけ不幸にしています
## 先に結論だけ
`package.json`に`files`フィールドを指定すると、`node_modules`に保存されるファイルサイズが減ります。
## はじめに
この記事は、[npm](https://www.npmjs.com/)の[package.json](https://docs.npmjs.com/cli/v7/configuring-npm/package-json)に指定するフィールド、[files](https://docs.npmjs.com/cli/v7/configuring-npm/package-json#files)の指定方法と効用を解説、共有するためのものです。
### 想定する読者
この記事は、以下の読者を想定して書かれています。
+ JavaScriptの開発経験がある
+ npmを使ったことがある
+ npmやGitHubでnpmモジュールを公開している### 想定する環境
この記事は、以下の環境を想定して書かれています。記事を読む前に、お手元の環境をご確認ください。
“`shell
$ npm –version
Denoで安全にevalしたい (Web Worker)
# なんでそんなことしたいの?
某サイトをスクレイピングするとき必要だった。
evalがアレなのはさんざん言われてるから隔離したい。
[eval() を使わないでください! – JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/eval#never_use_eval!)Web Workerを使えばメイン側とワーカー側でグローバルが違うから隔離できるはず。
Denoのデフォルトではワーカー側がメイン側のパーミッションを引き継ぐ。
メイン側で`–allow-net`してるとワーカー側でネット通信とかできちゃう。
ので、ワーカー側のパーミッションを無効化して使います。Denoのスクリプト内で使うんじゃなくて実行結果を見たいだけなら
普通に`deno run sample.ts`か`echo “1 + 1” | deno –`でいいと思います。
Denoに権限を与えてないから何もできないはずなので。# とりあえずWorkerを使ってみ
Astroとは何者なのか。
# 「Astro」について触れてみる
Astroについての記載が全くなかったので、自分なりに公式のページを見ての内容をまとめる。
今後も何か触れる機会があれば記述していきたい。
詳細については[公式ページへ](https://docs.astro.build/)
※あくまでもベータ版とのこと# Astroとは
## ●特徴
– Javascriptのフレームワークを組み合わせることやHTML+Javascriptを組み合わせることができる
– ビルドしたページはhtmlに変換されるためJavascriptを使用しない
– オンデマンドコンポーネントのため、Javascriptが必要なページについてもアクセス時に読み込まれる
– TypescriptやCSS,CSS Modules,Sassなどのnpmパッケージをサポートしている
– SEO対応によりシンジケーションの手間が省ける## ●個人的にいいなぁと思った点
– ReactやVueにも対応しているため、フレームワークからフレームワークへの技術移行が容易になる
– ポートフォリオを作成する際にReactもVueもかけますとい
無効化能力clearTimeoutを無効化するsetTimeoutを作る
#序論
“`js
const id = setTimeout(()=>{}, 1000);
clearTimeout(id);
“`
setTimeoutは、clearTimeoutで発動を阻止できます。#問題点
idは同一コンテキスト内で共通のもので、0から順番にインクリメントされていきます。
setTimeout(()=>{});で最新のidを発行できます。“`js
for(let i = 0, m = setTimeout(()=>{}); i < m; i++) clearTimeout(i); ``` こういうコードを実行されるとそれ以前のsetTimeoutが全て無効化されます。 これでは困りますね。 #解決策 異なるコンテキスト内であればsetTimeoutで発行されるidは全く別物なので無効化の対象外となります。 新しいコンテキストを生成しsetTimeoutを使う方法にWeb Workerがあります。 これを使っていきます。 ```js const newSetTimeout = new class { constructor(){
[JS]なぜawaitはasync関数の中にしか書けないのか
#先に結論
– awaitが使われている関数はジェネレータとして内部的に変換され、非同期処理になる。
– その為、async関数である必要がある。
– コンパイラから見ても、asyncが付いていることで効率的にコンパイルできる。#というわけで本編
awaitはPromiseを返す関数を呼び出す方法として非常に便利ですが、それを使う箇所にはいちいちasyncを付けて回らなければならないのが面倒だと思ったことはないでしょうか。そもそもawaitを内部で使っている関数が常にasyncである必要性がいまいちピンと来ない方もいるのではないでしょうか(最初にasync/awaitの構文を見た時、私自身がそうでした)。
例えば次のような何も返さない関数の場合に、asyncの指定は何の為に要るのでしょうか?
“`javascript
async function button1Click(){
try {
let data = await doAjax(url);
displayData(data);
}
catch (e){
alert(“ajax error!”);
Next.js+BULMAでアニメーション付きハンバーガーメニューを作る
## やりたいこと
* [BULMA](https://bulma.io/)は非常に軽量で扱いやすく、拡張性が高いCSSフレームワークです。https://bulma.io/
* 今回は、Next.jsで作ったサイトに、BULMAを導入し、ハンバーガーメニューを作って、そこにアニメーションを付ける、というのをやってみました?
* 完成したものはこちら?![animated-hamburger.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1309306/c913692d-d28a-ee55-a1b5-c14a7131a227.gif)
## BULMAの導入
“タグ内に、BULMAを使うためのリンクを追加します。
* 今回は、CDNから参照して使っています。
* htmlの“
* fontawesomeを使っているのでそのためのリンクも追加しています。“`html:components/layout.tsx
PWAでバックグラウンドに回ったことを検知する方法
PWAでバックグラウンドに回ったことを検知する方法になります。
## PWAでバックグラウンドに回ったことを検知する方法
“`javascript
if (window.matchMedia(‘(display-mode: standalone)’).matches) {
document.addEventListener(‘visibilitychange’, () => {
if (document.visibilityState === ‘hidden’) {
console.log(‘PWAでバックグラウンドに回りました’)
/* PWAでバックグラウンドに回った時に実行する処理を記述 */
}
})
}
“`## 解説
### PWAの判定について
PWAの判定は`matchMedia`でおこなっています。
manifest.jsonで設定したディスプレイモードによって変わります。“`javascript
window.matchMedia(‘(display-mode: fullscreen)’)
“``
セレクトボックスを選択後、自動でサブミット(送信)する方法
この記事では、
**セレクトボックスを選択後、自動でサブミット(送信)する方法**
について解説していきます。具体例としては、記事の並び替えなどに使うことができます。
![auto_select_submit.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/833332/2b7c6d29-2def-9710-c7e0-55412769bc90.gif)
https://muscle-meal-recipes.com/##前提
– HTMLのformでセレクトボックスを作成できる。
– JavaScript(jQuery)の環境が整っている##実装
“`html
Google アナリティクスの導入
▪️ Google アナリティクスとは
Googleが提供しているWeb解析ツールの事で、自分のサイトにどれだけの人が訪れてどれだけの人がサイトを閲覧しているかを分析してく入れるもの。↓
そしてgoogleアナリティクスをサイト内に組み込む事によってサイトの状況を把握でき、サイト改善にも繋がる。▪️ 書き方と導入
書き方と導入方法については下記のサイトを参考に実践して見てください。
https://dekiru.net/article/18635
毎回ログインするの面倒だから自動でログインをできるようにした SBI証券編
# はじめに
こんにちは。リモート会議の時に限って、近所のワンちゃんが吠え始めます、筆者です :sob:さて、以下記事で扱ったサービスがちょっとマイナーだったので、今回はみんな大好き**SBI証券**で行こうと思います :muscle:
https://qiita.com/akitkat/items/e436bed2ca4cfc4ca4ae
# 使用するもの
以下拡張機能です。
こちらは、**任意のJavaScript**を実行できる拡張機能です。
ドメインなどのフィルタもできるがいいところ!https://chrome.google.com/webstore/detail/scriptautorunner/gpgjofmpmjjopcogjgdldidobhmjmdbm?hl=ja
## 使い方
以下記事が参考になりました :bow:https://qiita.com/itaya/items/36ed8b890c87ac47d9d3
# 実践
今回は**SBI証券**のログインを自動化しますhttps://www.sbisec.co.jp/
**Scrip
Ajaxでページングした一覧ページから詳細ページへ遷移後にブラウザバックで一覧に戻っても、GETで一覧に戻っても、POSTで一覧に戻っても、F5でリロードしてもクリックした明細が画面内に表示されるサンプル
## 概要
次の一連の動作後の詳細ページから、ブラウザバックをした時に、スクロールで表示させた目的の明細が表示領域にある状態にしたい。
1. データ一覧をAjaxでページングする
1. 目的のデータまでスクロールする
1. 目的のデータのリンクをクリックして詳細ページを開く## 目的
次の動作を行った時、データ一覧ページにて、クリックしたデータ行が、表示領域にある事
* 明細ページからブラウザバックした時
* 明細ページからGETやPOSTのサブミットで一覧ページに戻った時
* 一覧ページでF5でリロードした時
* 一覧ページでCtrl+F5でキャッシュ削除リロードした時
* 一覧ページでブラウザバックした時に前に表示していたページを表示とともに、前回選択したデータ行にフォーカス
* 複数のタブで開いても、独立して処理される事。別のタブに影響を与えない事。サーバーのセッションやローカルストレージを使用しない事。(追記:セッションストレージは使える)## サンプルのURL
[Ajaxでページングして正しく表示領域の更新と履歴の更新をする](https://yamine
【JavaScript】Optional chainingが凄く便利だった件
## 未定義値参照
JavaScriptで未定義値を参照すると「Cannot read property」系のエラーが発生してdevtoolのconsoleが真っ赤になるのは良くご存知かと思います。例えば次のコードなどは未定義値参照をしているのでエラーになります。
“`js
const user = {
name: ‘Hoge’,
university: {
name: ‘Foo’
}
};const highSchoolName = user.highSchool.name;
console.log(highSchoolName);
// Error: Cannot read property ‘name’ of undefined
“`## Optional chainingを使う
Optional chaining (`?.`)を使うと未定義値参照をした時にエラーを発生させるのではなく、`undefined`や`null`を返す挙動になります。> The optional chaining operator (?.) enables yo
インスピレーションが湧かない人へ。今日から作れる挑戦しがいのあるアプリのアイディア5選
本記事は、[Trevor Indrek Lasn](https://trevorlasn.medium.com/)氏による「[Need Inspiration? Here Are 5 Challenging App Ideas You Can Start Building Today](https://betterprogramming.pub/here-are-5-challenging-app-ideas-you-can-start-building-today-jan-2020-78cd4fb45996)」(2020年1月9日公開)の和訳を、著者の許可を得て掲載しているものです。
#インスピレーションが湧かない人へ。今日から作れる挑戦しがいのあるアプリのアイディア5選
>コーディングに挑戦してスキルを磨こう![](https://miro.medium.com/max/700/1*Lr9N6ygUuAoGhA29otzpog.png)
##はじめに
他のスキルと同様に、コーディングも努力、忍耐、猛勉強によって習得することができます。コーディングは、常に鍛える必要がある筋
pdf.jsを使って画面をpdfにするときのテクニック
どうしてもサーバサイド言語を使わずにpdfにしないといけないというので色々やったメモです。
## 基本お作法
* pdf.js
* canvas2htmlを用意してやり
“`js
let doc = new jsPDF(‘p’,’pt’,’a4′)
let dom = document.body
doc.addHTML(dom, () => {
doc.save(‘html.pdf’)
})
“`これでbody(見えてる画面)がpdfになります。
## 注意するべき点
* 何もしないとクライアントの画面サイズで書き出される
* object-fitのcoverやcontainは効かない### 何もしないとクライアントの画面サイズで書き出される
結構ハマりました。
cssで幅指定したり、canvas2htmlのオプション調べたり・・・
結局`addHTML()`の第4引数(options)で`windowWidth`と`width`という2つの値を調整すればよさそうでした。“`js
let doc = new jsPDF(‘p’,’pt’,’a4
JavaScriptを基本からまとめてみた【よく見るエラーとその対策】【随時更新】
##はじめに
####学習するに至った経緯
2020年より、未経験からエンジニアへの転職を目指し、某プログラミングスクールへ通う。
入学後、『Ruby』を未経験から学ぶ人が多いのと『Ruby』の求人が思っていた以上に少ないので、
卒業後、フロントエンドのエンジニアを目指す事に。
Javascriptの学習した事を言語化し、認識の深化による備忘録として記載。##「Cannot read property ‘プロパティ名’ of undefined」とは
####1:「TypeError」は、タイプミスではない!
エラー文の前半を見ると『TypeError』とあり、何かの入力ミスをしていると思われるかもしれないが、プログラミングの文脈においてTypeは「型」を表す。
型とは文字列型や数値型など、値の種類を表す概念で、『TypeError』というのは型に関係のあるエラーという意味。
『Uncaught TypeError』は、さまざまな種類のエラーの頭に書いてあることが多く、エラー文の本体はその後ろの部分となる。####2:「’プロパティ名’ of undefined」は、「プロ
DynamoDB localを使ってDynamoDBをローカルでデプロイする
## 概要
DynamoDBはウェブサービスとして利用できるほか、別に提供されている**DynamoDB Local**を使えばDynamoDBを**開発用ローカルDBサーバ**としてデプロイすることができます。
DynamoDB Localに関する公式ドキュメントは以下の通り。https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.html
上記の記述の通り、DynamoDB Localは実行可能な.jarファイルとして提供されているほか、Dockerイメージとしても提供されており、`docker-compose`で簡単にデプロイすることができます。
今回は公式の記述を参考にしつつ、`docker-compose`でDynamoDB Localをデプロイし、Node.js上から読み書きするまでを行ってみたいと思います。
### dynamodb-admin
また、**dynamodb-admin**というDynamoDB Local用のGUIを提供してくれる
JSONでLISPの超循環評価器を定義してみた
すみません,半分くらいタイトル詐欺です.
* コメント文を区別するための記述以外は**文字列の配列構文のみ**を使用しています.ぶっちゃけ[S式](https://ja.wikipedia.org/wiki/S%E5%BC%8F#:~:text=S%E5%BC%8F%EF%BC%88%E3%82%A8%E3%82%B9%E3%81%97%E3%81%8D%E3%80%81%E8%8B%B1,S%E3%81%AFSymbol%E3%81%AB%E7%94%B1%E6%9D%A5%E3%80%82)とほとんど同じです.
* もちろん,JSON記述をパースしただけでは**LISP評価器として動きません**.[他の言語を用いた実装が必要です](https://ja.wikipedia.org/wiki/LISP#LISP%E3%81%AE%E6%AD%B4%E5%8F%B2).なお,リファレンス実装としてNode.js(JavaScript)で実際に動くようにしています.他の言語でも動くようになったら追記するかも.
【追記】`mcelisp.json`からほぼ自動生成した`mcelisp
ブラウザにマイクテスト機能を付ける
#はじめに
音声を扱うWebアプリを作成する時に、マイクテスト機能が欲しくて作成しました。
getUserMediaメソッドで音声を取得し、[MediaRecorder API](https://developer.mozilla.org/ja/docs/Web/API/MediaStream_Recording_API)を使って録音する方法です。
こちらの[記事](https://qiita.com/massie_g/items/ecfc16018210441051b4)をベースに作成しているので適宜参照して下さい。
#HTMLの設定
“`html:index.html
マイクテスト
マイクテスト
【Javascript】SQLのwhere的な文字列で真偽判定【構文解析】【改良版】
#概要
以下の記事でSQLのwhere的な構文(”type1=でんき and type2=ひこう”など)でobjectの真偽判定をするプログラムを書いたのですが、オブジェクト化を一切せずに書いたので、かなり見にくくなってしまいました。
[SQLのwhere的な条件指定によってテーブルから行を抽出【Javascript】【構文解析】](https://qiita.com/shimajiroxyz/items/3350ed9d95fd2e7d32fe)そこで関数をカプセル化して、コードを簡単にします。
コードとテスト用のファイルは以下に置いてあります。
https://github.com/JiroShimaya/SqlLikeFiltering実装にあたっては以下の記事を大いに参考にさせていただきました。
[JavaScriptでゆるく学ぶ再帰下降構文解析](https://qiita.com/aql/items/84cead7c028f54e089e0)#実装
##トークン管理関数
indexの管理から開放されるためのトークン管理関数を用意します。
`this`の扱いが苦