JavaScriptã®ãšãã§ã¯ãåãšå¯äœçšè¿œè·¡ãæ·±ãæãäžããä¿¡é Œæ§ãšä¿å®æ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®ç¶æ 管çãšéåææäœã®å æ¬çãªçè§£ãæäŸããŸãã
JavaScriptã®ãšãã§ã¯ãåïŒå ç¢ãªã¢ããªã±ãŒã·ã§ã³ã®ããã®å¯äœçšè¿œè·¡ããã¹ã¿ãŒãã
JavaScriptéçºã®äžçã§ã¯ãå ç¢ã§ä¿å®æ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã«ã¯ãå¯äœçšãã©ã®ããã«ç®¡çããããæ·±ãçè§£ããå¿ èŠããããŸããå¯äœçšãšã¯ãæ¬è³ªçã«ãçŸåšã®é¢æ°ã®ã¹ã³ãŒãå€ã®ç¶æ ã倿Žããããå€éšç°å¢ãšçžäºäœçšãããããæäœã®ããšã§ããããã«ã¯ãã°ããŒãã«å€æ°ã®æŽæ°ããAPIåŒã³åºããŸã§ããããããã®ãå«ãŸããŸããå¯äœçšã¯å®äžçã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«å¿ èŠã§ãããè€éããå¢ããã³ãŒãã®æšè«ãå°é£ã«ããããšããããŸãããã®èšäºã§ã¯ããšãã§ã¯ãåã®æŠå¿µãšãJavaScriptãããžã§ã¯ãã§å¯äœçšã广çã«è¿œè·¡ã»ç®¡çããæ¹æ³ãæ¢ããããäºæž¬å¯èœã§ãã¹ãããããã³ãŒãã«ã€ãªããŸãã
JavaScriptã«ãããå¯äœçšã®çè§£
ãšãã§ã¯ãåã«é£ã³èŸŒãåã«ãå¯äœçšãäœãæå³ããã®ããæç¢ºã«å®çŸ©ããŸããããå¯äœçšã¯ã颿°ãåŒããã®ããŒã«ã«ã¹ã³ãŒãå€ã®äœããã®ç¶æ ã倿Žããããå€éšã®äžçãšçžäºäœçšããããããšãã«çºçããŸããJavaScriptã«ãããäžè¬çãªå¯äœçšã®äŸã«ã¯ã以äžã®ãããªãã®ããããŸãã
- ã°ããŒãã«å€æ°ã®å€æŽã
- HTTPãªã¯ãšã¹ãã®å®è¡ïŒäŸïŒAPIããã®ããŒã¿ååŸïŒã
- ã³ã³ãœãŒã«ãžã®æžã蟌ã¿ïŒäŸïŒ
console.log
ã®äœ¿çšïŒã - DOMïŒããã¥ã¡ã³ããªããžã§ã¯ãã¢ãã«ïŒã®æŽæ°ã
- ã¿ã€ããŒã®èšå®ïŒäŸïŒ
setTimeout
ãsetInterval
ã®äœ¿çšïŒã - ãŠãŒã¶ãŒå ¥åã®èªã¿åãã
- ä¹±æ°ã®çæã
ã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã§å¯äœçšã¯é¿ããããŸããããå¶åŸ¡ãããŠããªãå¯äœçšã¯äºæž¬äžèœãªåäœãå°é£ãªãããã°ãè€éæ§ã®å¢å ã«ã€ãªããå¯èœæ§ããããŸãããããã£ãŠããããã广çã«ç®¡çããããšãéèŠã§ãã
ãšãã§ã¯ãåã®å°å ¥
ãšãã§ã¯ãåã¯ã颿°ãçæããå¯èœæ§ã®ããå¯äœçšã®çš®é¡ãåé¡ãã远跡ããæ¹æ³ã§ãã颿°ã®ãšãã§ã¯ãåãæç€ºçã«å®£èšããããšã§ããã®é¢æ°ãäœãããã®ããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåãšã©ã®ããã«çžäºäœçšããã®ããçè§£ãããããªããŸãããã®æŠå¿µã¯ããã°ãã°é¢æ°åããã°ã©ãã³ã°ã®ãã©ãã€ã ãšé¢é£ä»ããããŸãã
æ¬è³ªçã«ããšãã§ã¯ãåã¯ã颿°ãåŒãèµ·ããå¯èœæ§ã®ããæœåšçãªå¯äœçšãèšè¿°ããæ³šéãã¡ã¿ããŒã¿ã®ãããªãã®ã§ãããããã¯ãéçºè ãšã³ã³ãã€ã©ïŒéçåãã§ãã¯ãæã€èšèªã䜿çšããŠããå ŽåïŒã®äž¡æ¹ã«å¯ŸããŠã颿°ã®æ¯ãèãã«ã€ããŠã®ã·ã°ãã«ãšããŠæ©èœããŸãã
ãšãã§ã¯ãåã䜿çšããã¡ãªãã
- ã³ãŒãã®æç¢ºæ§ã®åäžïŒ ãšãã§ã¯ãåã¯ã颿°ãã©ã®ãããªå¯äœçšãçã¿åºãå¯èœæ§ãããããæç¢ºã«ããã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãåäžãããŸãã
- ãããã°ã®åŒ·åïŒ æœåšçãªå¯äœçšãç¥ãããšã§ããã°ãäºæãã¬æåã®åå ãããç°¡åã«çªãæ¢ããããšãã§ããŸãã
- ãã¹ãå®¹ææ§ã®åäžïŒ å¯äœçšãæç€ºçã«å®£èšãããŠãããšã颿°ãåé¢ããŠã¢ãã¯ãããã¹ãããããšã容æã«ãªããŸãã
- ã³ã³ãã€ã©ã®æ¯æŽïŒ éçåãã§ãã¯ãæã€èšèªã¯ããšãã§ã¯ãåã䜿çšããŠå¶çŽã匷å¶ããã³ã³ãã€ã«æã«ç¹å®ã®çš®é¡ã®ãšã©ãŒãé²ãããšãã§ããŸãã
- ããè¯ãã³ãŒãæ§æïŒ ãšãã§ã¯ãåã¯ãå¯äœçšãæå°éã«æããã¢ãžã¥ãŒã«æ§ãä¿é²ããæ¹æ³ã§ã³ãŒããæ§æããã®ã«åœ¹ç«ã¡ãŸãã
JavaScriptã§ã®ãšãã§ã¯ãåã®å®è£
JavaScriptã¯åçåä»ãèšèªã§ãããããHaskellãElmã®ãããªéçåä»ãèšèªãšåãæ¹æ³ã§ãšãã§ã¯ãåããã€ãã£ãã«ãµããŒãããŠããŸãããããããããŸããŸãªæè¡ãã©ã€ãã©ãªã䜿çšããŠãšãã§ã¯ãåãå®è£ ããããšã¯å¯èœã§ãã
1. ããã¥ã¡ã³ããŒã·ã§ã³ãšèŠçŽ
æãç°¡åãªã¢ãããŒãã¯ãããã¥ã¡ã³ããŒã·ã§ã³ãšåœåèŠåã䜿çšããŠã颿°ã®ãšãã§ã¯ãåã瀺ãããšã§ããäŸãã°ãJSDocã³ã¡ã³ãã䜿çšããŠã颿°ãçæããå¯èœæ§ã®ããå¯äœçšãèšè¿°ããããšãã§ããŸãã
/**
* APIãšã³ããã€ã³ãããããŒã¿ãååŸããŸãã
*
* @effect HTTP - HTTPãªã¯ãšã¹ããè¡ããŸãã
* @effect Console - ã³ã³ãœãŒã«ã«æžã蟌ã¿ãŸãã
*
* @param {string} url - ããŒã¿ãååŸããURLã
* @returns {Promise} - ããŒã¿ã§è§£æ±ºãããPromiseã
*/
async function fetchData(url) {
console.log(`Fetching data from ${url}...`);
const response = await fetch(url);
const data = await response.json();
return data;
}
ãã®ã¢ãããŒãã¯éçºè ã®èŠåŸã«äŸåããŸãããã³ãŒãå ã®å¯äœçšãçè§£ããææžåããããã®æçšãªåºçºç¹ãšãªãåŸãŸãã
2. éçåä»ãã®ããã®TypeScriptã®äœ¿çš
JavaScriptã®ã¹ãŒããŒã»ããã§ããTypeScriptã¯ãéçåä»ããèšèªã«è¿œå ããŸããTypeScriptã«ã¯ãšãã§ã¯ãåã®æç€ºçãªãµããŒãã¯ãããŸãããããã®åã·ã¹ãã ã䜿çšããŠå¯äœçšãã¢ãã«åãã远跡ããããšãã§ããŸãã
äŸãã°ã颿°ãçæããå¯èœæ§ã®ããå¯äœçšã衚ãåãå®çŸ©ã§ããŸãã
type Effect = "HTTP" | "Console" | "DOM";
type Effectful = {
value: T;
effects: E[];
};
async function fetchData(url: string): Promise> {
console.log(`Fetching data from ${url}...`);
const response = await fetch(url);
const data = await response.json();
return { value: data, effects: ["HTTP", "Console"] };
}
ãã®ã¢ãããŒãã«ããã颿°ã®æœåšçãªå¯äœçšãã³ã³ãã€ã«æã«è¿œè·¡ã§ãããšã©ãŒãæ©æã«çºèŠããã®ã«åœ¹ç«ã¡ãŸãã
3. 颿°åããã°ã©ãã³ã°ã©ã€ãã©ãª
`fp-ts`ã`Ramda`ã®ãããªé¢æ°åããã°ã©ãã³ã°ã©ã€ãã©ãªã¯ãå¯äœçšãããå¶åŸ¡ãããäºæž¬å¯èœãªæ¹æ³ã§ç®¡çããããã®ããŒã«ãšæœè±¡åãæäŸããŸãããããã®ã©ã€ãã©ãªã¯ãã¢ããããã¡ã³ã¯ã¿ãŒã®ãããªæŠå¿µã䜿çšããŠãå¯äœçšãã«ãã»ã«åããåæããããšããããããŸãã
äŸãã°ã`fp-ts`ã®`IO`ã¢ããã䜿çšããŠãå¯äœçšãæã€å¯èœæ§ã®ããèšç®ã衚çŸã§ããŸãã
import { IO } from 'fp-ts/IO'
const logMessage = (message: string): IO => new IO(() => console.log(message))
const program: IO = logMessage('Hello, world!')
program.run()
`IO`ã¢ããã䜿çšãããšãæç€ºçã«`run`ã¡ãœãããåŒã³åºããŸã§å¯äœçšã®å®è¡ãé å»¶ãããããšãã§ããŸããããã¯ãããå¶åŸ¡ãããæ¹æ³ã§å¯äœçšããã¹ããããåæãããããã®ã«åœ¹ç«ã¡ãŸãã
4. RxJSã«ãããªã¢ã¯ãã£ãããã°ã©ãã³ã°
RxJSã®ãããªãªã¢ã¯ãã£ãããã°ã©ãã³ã°ã©ã€ãã©ãªã¯ãéåæããŒã¿ã¹ããªãŒã ãšå¯äœçšã管çããããã®åŒ·åãªããŒã«ãæäŸããŸããRxJSã¯Observableã䜿çšããŠããŒã¿ã¹ããªãŒã ã衚çŸãããªãã¬ãŒã¿ã䜿çšããŠãããã®ã¹ããªãŒã ã倿ã»çµåããŸãã
RxJSã䜿çšããŠãå¯äœçšãObservableå ã«ã«ãã»ã«åãã宣èšçãªæ¹æ³ã§ç®¡çã§ããŸããäŸãã°ã`ajax`ãªãã¬ãŒã¿ã䜿çšããŠHTTPãªã¯ãšã¹ããè¡ããã¬ã¹ãã³ã¹ãåŠçããããšãã§ããŸãã
import { ajax } from 'rxjs/ajax';
const data$ = ajax('/api/data');
data$.subscribe(
data => console.log('data: ', data),
error => console.error('error: ', error)
);
RxJSã¯ããšã©ãŒåŠçããªãã©ã€ããã®ä»ã®äžè¬çãªå¯äœçšã®ã·ããªãªãåŠçããããã®è±å¯ãªãªãã¬ãŒã¿ã»ãããæäŸããŸãã
å¯äœçšã管çããããã®æŠç¥
ãšãã§ã¯ãåã®äœ¿çšã«å ããŠãJavaScriptã¢ããªã±ãŒã·ã§ã³ã§å¯äœçšã管çããããã«æ¡çšã§ããããã€ãã®äžè¬çãªæŠç¥ããããŸãã
1. åé¢
å¯äœçšãã§ããã ãåé¢ããŸããããã¯ãå¯äœçšãçæããã³ãŒããçŽç²é¢æ°ïŒåãå ¥åã«å¯ŸããŠåžžã«åãåºåãè¿ããå¯äœçšããªã颿°ïŒããåé¢ããŠããããšãæå³ããŸããå¯äœçšãåé¢ããããšã§ãã³ãŒãã®ãã¹ããšæšè«ã容æã«ãªããŸãã
2. äŸåæ§ã®æ³šå ¥
äŸåæ§ã®æ³šå ¥ã䜿çšããŠãå¯äœçšããããã¹ãããããããŸããå¯äœçšãåŒãèµ·ããäŸåé¢ä¿ïŒäŸïŒ`window`ã`document`ããŸãã¯ããŒã¿ããŒã¹æ¥ç¶ïŒãããŒãã³ãŒãã£ã³ã°ãã代ããã«ããããã颿°ãã³ã³ããŒãã³ãã«åŒæ°ãšããŠæž¡ããŸããããã«ããããã¹ãã§ãããã®äŸåé¢ä¿ãã¢ãã¯ããããšãã§ããŸãã
function updateTitle(newTitle, dom) {
dom.title = newTitle;
}
// äœ¿çšæ³:
updateTitle('My New Title', document);
// ãã¹ãã§ã¯:
const mockDocument = { title: '' };
updateTitle('My New Title', mockDocument);
expect(mockDocument.title).toBe('My New Title');
3. äžå€æ§
äžå€æ§ãåãå ¥ããŸããããæ¢åã®ããŒã¿æ§é ã倿Žãã代ããã«ãæãŸãã倿Žãå ããæ°ããããŒã¿æ§é ãäœæããŸããããã«ãããäºæãã¬å¯äœçšãé²ããã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã«ã€ããŠæšè«ãããããªããŸããImmutable.jsã®ãããªã©ã€ãã©ãªã¯ãäžå€ããŒã¿æ§é ãæ±ãã®ã«åœ¹ç«ã¡ãŸãã
4. ç¶æ 管çã©ã€ãã©ãª
ReduxãVuexãZustandãªã©ã®ç¶æ 管çã©ã€ãã©ãªã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãäžå çãã€äºæž¬å¯èœãªæ¹æ³ã§ç®¡çããŸãããããã®ã©ã€ãã©ãªã¯éåžžãç¶æ ã®å€æŽã远跡ããå¯äœçšã管çããã¡ã«ããºã ãæäŸããŸãã
äŸãã°ãReduxã¯reducerã䜿çšããŠãã¢ã¯ã·ã§ã³ã«å¿ããŠã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãæŽæ°ããŸããreducerã¯ã以åã®ç¶æ ãšã¢ã¯ã·ã§ã³ãå ¥åãšããŠåãåããæ°ããç¶æ ãè¿ãçŽç²é¢æ°ã§ããå¯äœçšã¯éåžžãããã«ãŠã§ã¢ã§åŠçãããã¢ã¯ã·ã§ã³ãã€ã³ã¿ãŒã»ããããŠéåææäœããã®ä»ã®å¯äœçšãå®è¡ã§ããŸãã
5. ãšã©ãŒãã³ããªã³ã°
å ç¢ãªãšã©ãŒãã³ããªã³ã°ãå®è£ ããŠãäºæãã¬å¯äœçšãé©åã«åŠçããŸãã`try...catch`ãããã¯ã䜿çšããŠäŸå€ããã£ãããããŠãŒã¶ãŒã«æå³ã®ãããšã©ãŒã¡ãã»ãŒãžãæäŸããŸããSentryã®ãããªãšã©ãŒãã©ããã³ã°ãµãŒãã¹ã䜿çšããŠãæ¬çªç°å¢ã§ã®ãšã©ãŒãç£èŠã»èšé²ããããšãæ€èšããŠãã ããã
6. ãã®ã³ã°ãšã¢ãã¿ãªã³ã°
ãã®ã³ã°ãšã¢ãã¿ãªã³ã°ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®åäœã远跡ããæœåšçãªå¯äœçšã®åé¡ãç¹å®ããŸããéèŠãªã€ãã³ããç¶æ ã®å€æŽããã°ã«èšé²ããããšã§ãã¢ããªã±ãŒã·ã§ã³ãã©ã®ããã«åäœããŠããããçè§£ããçºçããåé¡ããããã°ããã®ã«åœ¹ç«ã¡ãŸããGoogle Analyticsãã«ã¹ã¿ã ãã®ã³ã°ãœãªã¥ãŒã·ã§ã³ã®ãããªããŒã«ã圹ç«ã¡ãŸãã
å®äžçã®äŸ
ããŸããŸãªã·ããªãªã§ãšãã§ã¯ãåãšå¯äœçšç®¡çæŠç¥ãã©ã®ããã«é©çšãããã®å®äžçã®äŸãããã€ãèŠãŠã¿ãŸãããã
1. APIåŒã³åºãã䌎ãReactã³ã³ããŒãã³ã
import React, { useState, useEffect } from 'react';
function UserProfile({ userId }) {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
async function fetchUser() {
try {
const response = await fetch(`/api/users/${userId}`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
setUser(data);
} catch (e) {
setError(e);
} finally {
setLoading(false);
}
}
fetchUser();
}, [userId]);
if (loading) {
return Loading...
;
}
if (error) {
return Error: {error.message}
;
}
return (
{user.name}
Email: {user.email}
);
}
export default UserProfile;
ãã®äŸã§ã¯ã`UserProfile`ã³ã³ããŒãã³ããAPIåŒã³åºããè¡ã£ãŠãŠãŒã¶ãŒããŒã¿ãååŸããŸããå¯äœçšã¯`useEffect`ããã¯å ã«ã«ãã»ã«åãããŠããŸãããšã©ãŒãã³ããªã³ã°ã¯`try...catch`ãããã¯ã䜿çšããŠå®è£ ãããŠããŸããããŒãã£ã³ã°ç¶æ ã¯`useState`ã䜿çšããŠç®¡çããããŠãŒã¶ãŒã«ãã£ãŒãããã¯ãæäŸããŸãã
2. ããŒã¿ããŒã¹ãšã®ããåããããNode.jsãµãŒããŒ
const express = require('express');
const mongoose = require('mongoose');
const app = express();
const port = 3000;
mongoose.connect('mongodb://localhost:27017/mydatabase', {
useNewUrlParser: true,
useUnifiedTopology: true
});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log('Connected to MongoDB');
});
const userSchema = new mongoose.Schema({
name: String,
email: String
});
const User = mongoose.model('User', userSchema);
app.get('/users', async (req, res) => {
try {
const users = await User.find({});
res.json(users);
} catch (err) {
console.error(err);
res.status(500).send('Server error');
}
});
app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`);
});
ãã®äŸã¯ãMongoDBããŒã¿ããŒã¹ãšããåãããNode.jsãµãŒããŒã瀺ããŠããŸããå¯äœçšã«ã¯ãããŒã¿ããŒã¹ãžã®æ¥ç¶ãããŒã¿ããŒã¹ãžã®ã¯ãšãªãã¯ã©ã€ã¢ã³ããžã®ã¬ã¹ãã³ã¹éä¿¡ãå«ãŸããŸãããšã©ãŒãã³ããªã³ã°ã¯`try...catch`ãããã¯ã䜿çšããŠå®è£ ãããŠããŸãããã®ã³ã°ã¯ãããŒã¿ããŒã¹æ¥ç¶ãšãµãŒããŒã®èµ·åãç£èŠããããã«äœ¿çšãããŸãã
3. ããŒã«ã«ã¹ãã¬ãŒãžã䜿çšãããã©ãŠã¶æ¡åŒµæ©èœ
// background.js
chrome.runtime.onInstalled.addListener(() => {
chrome.storage.sync.set({ color: '#3aa757' }, () => {
console.log('Default background color set to #3aa757');
});
});
chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target: { tabId: tab.id },
function: setPageBackgroundColor
});
});
function setPageBackgroundColor() {
chrome.storage.sync.get('color', ({ color }) => {
document.body.style.backgroundColor = color;
});
}
ãã®äŸã¯ããŠã§ãããŒãžã®èæ¯è²ã倿Žããã·ã³ãã«ãªãã©ãŠã¶æ¡åŒµæ©èœã瀺ããŠããŸããå¯äœçšã«ã¯ããã©ãŠã¶ã®ã¹ãã¬ãŒãžAPIïŒ`chrome.storage`ïŒãšã®ããåãããDOMã®å€æŽïŒ`document.body.style.backgroundColor`ïŒãå«ãŸããŸããããã¯ã°ã©ãŠã³ãã¹ã¯ãªããã¯ãæ¡åŒµæ©èœãã€ã³ã¹ããŒã«ãããã®ããªãã¹ã³ããããŒã«ã«ã¹ãã¬ãŒãžã«ããã©ã«ãã®è²ãèšå®ããŸããæ¡åŒµæ©èœã®ã¢ã€ã³ã³ãã¯ãªãã¯ããããšãããŒã«ã«ã¹ãã¬ãŒãžããè²ãèªã¿åã£ãŠçŸåšã®ããŒãžã«é©çšããã¹ã¯ãªãããå®è¡ãããŸãã
çµè«
ãšãã§ã¯ãåãšå¯äœçšã®è¿œè·¡ã¯ãå ç¢ã§ä¿å®æ§ã®é«ãJavaScriptã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®äžå¯æ¬ ãªæŠå¿µã§ããå¯äœçšãšã¯äœããããããã©ã®ããã«åé¡ãã广çã«ç®¡çããæ¹æ³ãçè§£ããããšã§ããã¹ãããããã°ãæšè«ã容æãªã³ãŒããæžãããšãã§ããŸããJavaScriptã¯ãã€ãã£ãã§ãšãã§ã¯ãåããµããŒãããŠããŸããããããã¥ã¡ã³ããŒã·ã§ã³ãTypeScriptã颿°åããã°ã©ãã³ã°ã©ã€ãã©ãªããªã¢ã¯ãã£ãããã°ã©ãã³ã°ã©ã€ãã©ãªãªã©ãããŸããŸãªæè¡ãã©ã€ãã©ãªã䜿çšããŠããããå®è£ ã§ããŸããåé¢ãäŸåæ§ã®æ³šå ¥ãäžå€æ§ãç¶æ 管çãªã©ã®æŠç¥ãæ¡çšããããšã§ãå¯äœçšãå¶åŸ¡ããé«å質ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããèœåãããã«é«ããããšãã§ããŸãã
JavaScriptéçºè ãšããŠã®æ ãç¶ããäžã§ãå¯äœçšç®¡çããã¹ã¿ãŒããããšã¯ãè€éã§ä¿¡é Œæ§ã®é«ãã·ã¹ãã ãæ§ç¯ããåãäžããŠãããéèŠãªã¹ãã«ã§ããããšãå¿ããªãã§ãã ããããããã®ååãšæè¡ãåãå ¥ããããšã§ãæ©èœçã§ããã ãã§ãªããä¿å®å¯èœã§ã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ãäœæããããšãã§ããŸãã
ãããªãåŠç¿
- JavaScriptã«ããã颿°åããã°ã©ãã³ã°ïŒ 颿°åããã°ã©ãã³ã°ã®æŠå¿µãšãããããJavaScriptéçºã«ã©ã®ããã«é©çšãããããæ¢ããŸãã
- RxJSã«ãããªã¢ã¯ãã£ãããã°ã©ãã³ã°ïŒ RxJSã䜿çšããŠéåæããŒã¿ã¹ããªãŒã ãšå¯äœçšã管çããæ¹æ³ãåŠã³ãŸãã
- ç¶æ 管çã©ã€ãã©ãªïŒ ReduxãVuexãZustandãªã©ã®ããŸããŸãªç¶æ 管çã©ã€ãã©ãªã調æ»ããŸãã
- TypeScriptããã¥ã¡ã³ããŒã·ã§ã³ïŒ TypeScriptã®åã·ã¹ãã ãšãããã䜿çšããŠå¯äœçšãã¢ãã«åã»è¿œè·¡ããæ¹æ³ãããã«æ·±ãæãäžããŸãã
- fp-tsã©ã€ãã©ãªïŒ TypeScriptã§ã®é¢æ°åããã°ã©ãã³ã°ã®ããã®fp-tsã©ã€ãã©ãªãæ¢ããŸãã